eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.comp.programmingWyrażenia regularne
Ilość wypowiedzi w tym wątku: 12

  • 1. Data: 2011-08-11 20:45:21
    Temat: Wyrażenia regularne
    Od: Karol Y <k...@o...pl>

    Witam, mam mały problem; dla mnie póki co zagadkę. Próbuje sparsować
    parametry i ich argumenty za pomocą wyrażenia regularnego i ciąg który
    na wejściu mogę dostać wygląda:

    param1 arg1[, param2 arg2] ...

    a wyrażenie, które na razie wymyśliłem mam takie:

    "(?:param1 (?<p1>.*))?(?:, ?param2 (?<p2>.*))?" ...

    Problem w tym, że w takiej postaci otrzymuje złe wyniki dla grup p1 i
    p2, bo:

    p1: arg1, param2 arg2
    p2:

    Usuwając znak zapytania z końca wyrażenia jest już poprawnie, bo:

    p1: arg1
    p2: arg2

    Ale jednocześnie tracę opcjonalność parametru, a tych parametrów
    przypomnę może być wiele. Dodam że każdy parametr jak już jest to w
    parze z argumentem oraz że kolejność parametrów jest ściśle określona i
    znana.

    Tak że ze zbioru ABCDE może wystąpić tylko ABD, ale kolejność będzie
    zachowana. Czy taka gramatyka mieści się w ogóle w zakresie wyrażeń
    regularnych?

    --
    Mateusz Bogusz


  • 2. Data: 2011-08-11 20:58:17
    Temat: Re: Wyrażenia regularne
    Od: Wojciech Muła <w...@p...null.onet.pl.invalid>

    On Thu, 11 Aug 2011 22:45:21 +0200 Karol Y <k...@o...pl> wrote:

    > Witam, mam mały problem; dla mnie póki co zagadkę. Próbuje sparsować
    > parametry i ich argumenty za pomocą wyrażenia regularnego i ciąg
    > który na wejściu mogę dostać wygląda:
    >
    > param1 arg1[, param2 arg2] ...
    >
    > a wyrażenie, które na razie wymyśliłem mam takie:
    >
    > "(?:param1 (?<p1>.*))?(?:, ?param2 (?<p2>.*))?" ...
    >
    > Problem w tym, że w takiej postaci otrzymuje złe wyniki dla grup p1 i
    > p2, bo:
    >
    > p1: arg1, param2 arg2
    > p2:

    Jeśli dopasowywany jest najdłuższy napis, to pierwsze ".*" dopasuje
    wszystko, włącznie z przecinkiem i co tam masz dalej. Spróbuj
    "[^,]*", tj. dowolny ciąg znaków prócz przecinka.

    Ogólnie, to wydaje mi się, że masz tam za dużo znaków zapytania,
    wystarczy jeden na parę (nazwa parametru, wartość).

    > Tak że ze zbioru ABCDE może wystąpić tylko ABD, ale kolejność będzie
    > zachowana. Czy taka gramatyka mieści się w ogóle w zakresie wyrażeń
    > regularnych?

    Tak. Przecież napisałeś wyrażenie, które dopasowuje napisy w podanej
    kolejności. :)

    w.


  • 3. Data: 2011-08-12 08:16:26
    Temat: Re: Wyrażenia regularne
    Od: "Stachu 'Dozzie' K." <d...@g...eat.some.screws.spammer.invalid>

    On 2011-08-11, Karol Y <k...@o...pl> wrote:
    > Witam, mam mały problem; dla mnie póki co zagadkę. Próbuje sparsować
    > parametry i ich argumenty za pomocą wyrażenia regularnego i ciąg który
    > na wejściu mogę dostać wygląda:
    >
    > param1 arg1[, param2 arg2] ...
    >
    [...]
    > Ale jednocześnie tracę opcjonalność parametru, a tych parametrów
    > przypomnę może być wiele. Dodam że każdy parametr jak już jest to w
    > parze z argumentem oraz że kolejność parametrów jest ściśle określona i
    > znana.
    >
    > Tak że ze zbioru ABCDE może wystąpić tylko ABD, ale kolejność będzie
    > zachowana. Czy taka gramatyka mieści się w ogóle w zakresie wyrażeń
    > regularnych?

    A o jakich w ogóle wyrażeniach regularnych mowa? Bo twój przykład
    zalatuje mi PCRE.

    --
    Secunia non olet.
    Stanislaw Klekot


  • 4. Data: 2011-08-12 10:24:29
    Temat: Re: Wyrażenia regularne
    Od: Michoo <m...@v...pl>

    W dniu 11.08.2011 22:45, Karol Y pisze:
    > Witam, mam mały problem; dla mnie póki co zagadkę. Próbuje sparsować
    > parametry i ich argumenty za pomocą wyrażenia regularnego i ciąg który
    > na wejściu mogę dostać wygląda:
    >
    > param1 arg1[, param2 arg2] ...
    >
    > a wyrażenie, które na razie wymyśliłem mam takie:
    >
    > "(?:param1 (?<p1>.*))?(?:, ?param2 (?<p2>.*))?" ...
    [..]
    > Ale jednocześnie tracę opcjonalność parametru, a tych parametrów
    > przypomnę może być wiele. Dodam że każdy parametr jak już jest to w
    > parze z argumentem oraz że kolejność parametrów jest ściśle określona i
    > znana.
    Tak na szybko to widzę 2 możliwości:
    - prostsza to pocięcie po przecinkach (czy nawet od razu na pary
    (nazwa_parametru, arg) a potem parsowanie tego co pośrodku
    - trudniejsza to przemyślenie co może się pojawić i użycie czegoś
    sprytniejszego od .*, prawdopodobnie dodatkowo zakończonego ? na końcu.

    Wydaje mi się (nie sprawdzałem), że np coś takiego dla każdego parametru
    by mogło działać.
    (?:param1[[:space:]]+(?<p1>[[:alnum:]]+?))?(?:,?[[:s
    pace:]]+)?


    --
    Pozdrawiam
    Michoo


  • 5. Data: 2011-08-13 13:27:21
    Temat: Re: Wyrażenia regularne
    Od: Karol Y <k...@o...pl>

    > Tak na szybko to widzę 2 możliwości:
    > - prostsza to pocięcie po przecinkach (czy nawet od razu na pary
    > (nazwa_parametru, arg) a potem parsowanie tego co pośrodku
    > - trudniejsza to przemyślenie co może się pojawić i użycie czegoś
    > sprytniejszego od .*, prawdopodobnie dodatkowo zakończonego ? na końcu.
    >
    > Wydaje mi się (nie sprawdzałem), że np coś takiego dla każdego parametru
    > by mogło działać.
    > (?:param1[[:space:]]+(?<p1>[[:alnum:]]+?))?(?:,?[[:s
    pace:]]+)?

    I podany przykład działa, ale pominąłem drobny szczegół - arg - to w
    domyśle zbiór dowolnych znaków również białych. Chyba że ":alnum:" źle
    rozumiem jako tylko alfanumeryczne.

    --
    Mateusz Bogusz


  • 6. Data: 2011-08-13 13:31:43
    Temat: Re: Wyrażenia regularne
    Od: Karol Y <k...@o...pl>

    > A o jakich w ogóle wyrażeniach regularnych mowa? Bo twój przykład
    > zalatuje mi PCRE.

    Tak ogólnie to chciałbym sparsować:

    "SELECT ... FROM ... [GROUP BY ...] [HEAVING BY ...][ORDER BY ...]"

    aby dostać w zwrocie to co pod wielokropkiem w odpowiednich grupach.

    A co ma wspólnego Perl z wyrażeniami w kontekście mojego pytania? Chyba
    że źle rozszyfrowałem skrót.

    --
    Mateusz Bogusz


  • 7. Data: 2011-08-14 16:33:57
    Temat: Re: Wyrażenia regularne
    Od: "Stachu 'Dozzie' K." <d...@g...eat.some.screws.spammer.invalid>

    On 2011-08-13, Karol Y <k...@o...pl> wrote:
    >> A o jakich w ogóle wyrażeniach regularnych mowa? Bo twój przykład
    >> zalatuje mi PCRE.
    >
    > Tak ogólnie to chciałbym sparsować:
    >
    > "SELECT ... FROM ... [GROUP BY ...] [HEAVING BY ...][ORDER BY ...]"
    >
    > aby dostać w zwrocie to co pod wielokropkiem w odpowiednich grupach.
    >
    > A co ma wspólnego Perl z wyrażeniami w kontekście mojego pytania? Chyba
    > że źle rozszyfrowałem skrót.

    No pewnie źle rozszyfrowałeś skoro nie wiesz co z tym Perl ma wspólnego.
    http://en.wikipedia.org/wiki/PCRE

    I nie odpowiedziałeś na moje pytanie: jakiego dialektu wyrażeń
    regularnych chcesz używać?

    --
    Secunia non olet.
    Stanislaw Klekot


  • 8. Data: 2011-08-15 09:14:55
    Temat: Re: Wyrażenia regularne
    Od: Karol Y <k...@o...pl>

    > No pewnie źle rozszyfrowałeś skoro nie wiesz co z tym Perl ma wspólnego.
    > http://en.wikipedia.org/wiki/PCRE
    >
    > I nie odpowiedziałeś na moje pytanie: jakiego dialektu wyrażeń
    > regularnych chcesz używać?

    No jak mogę wybrać, to dialekt .NETa

    Przy ciągu:
    "SELECT kolumna1, kolumna2 FROM tabela1 WHERE a = b ORDER BY 1"

    chce złapać po prostu wszystko co pomiędzy słowami kluczowymi:
    (?:SELECT (.*))(?:FROM (.*))(?:WHERE (.*))?(?:ORDER BY (.*))?

    Oczywiście "problem" już rozwiązany chociażby, poprzez dodanie elementów
    opcjonalnych jako nie opcjonalnych po wcześniejszym wyszukaniu czy ciąg
    zawiera dane słowo kluczowe. Chce po prostu umieć to zrobić "porządnie",
    poprzez jeden wzorzec regexp, bez dodatkowej pętli wyszukującej słowa
    kluczowe.

    --
    Mateusz Bogusz


  • 9. Data: 2011-08-15 12:57:27
    Temat: Re: Wyrażenia regularne
    Od: Michoo <m...@v...pl>

    W dniu 15.08.2011 11:14, Karol Y pisze:
    >> No pewnie źle rozszyfrowałeś skoro nie wiesz co z tym Perl ma wspólnego.
    >> http://en.wikipedia.org/wiki/PCRE
    >>
    >> I nie odpowiedziałeś na moje pytanie: jakiego dialektu wyrażeń
    >> regularnych chcesz używać?
    >
    > No jak mogę wybrać, to dialekt .NETa
    >
    > Przy ciągu:
    > "SELECT kolumna1, kolumna2 FROM tabela1 WHERE a = b ORDER BY 1"

    (?:SELECT (.*?))?(?:FROM (.*?))?(?:WHERE (.*?))?(?:ORDER BY (.*?))?

    --
    Pozdrawiam
    Michoo


  • 10. Data: 2011-08-15 22:51:52
    Temat: Re: Wyrażenia regularne
    Od: Karol Y <k...@o...pl>

    >> Przy ciągu:
    >> "SELECT kolumna1, kolumna2 FROM tabela1 WHERE a = b ORDER BY 1"
    >
    > (?:SELECT (.*?))?(?:FROM (.*?))?(?:WHERE (.*?))?(?:ORDER BY (.*?))?

    No właśnie proste przerobienie na niezachłanne w połączeniu z grupami
    opcjonalnymi nie działa.

    --
    Mateusz Bogusz

strony : [ 1 ] . 2


Szukaj w grupach

Szukaj w grupach

Eksperci egospodarka.pl

1 1 1

Wpisz nazwę miasta, dla którego chcesz znaleźć jednostkę ZUS.

Wzory dokumentów

Bezpłatne wzory dokumentów i formularzy.
Wyszukaj i pobierz za darmo: