Re: RE: 2Евгений Зайцев : прокомментируй , вроде с регекспами в xemacs разбирался.
Zajcev Evgeny <[email protected]> Fri, 17 Dec 2004 19:26:36 +0300
| Newsgroups | gmane.emacs.xemacs.user.russian |
|---|---|
| Message-ID | <[email protected]> |
"Nickolay Pakoulin" <[email protected]> writes: > Это в Хемаксе правила группировки не определены как следует. > > Выдержка из документации > > `\|' applies to the largest possible surrounding expressions. > Only a surrounding `\( ... \)' grouping can limit the grouping > power of `\|'. > Клево! Вот значит вот именно это в XEmacs работает криво. Кстати откуда конкретно(какой раздел) эта выдержка? > Если оператор альтернативы действительно действует на самое длинное > выражение, то в случае 2 это должно быть > > {\([^{}|]+\)} > > Коля. > > -----Original Message----- > From: [email protected] > [mailto:[email protected]] On Behalf Of Zajcev Evgeny > Sent: Friday, December 17, 2004 2:10 PM > To: Andrey Slusar > Cc: [email protected] > Subject: Re: 2Евгений Зайцев : прокомментируй , вроде с регекспами в xemacs > разбирался. > > Andrey Slusar <[email protected]> writes: > >> From: Aleksey Cheusov <[email protected]> >> Subject: xemacs's string-match and match-beginning >> Newsgroups: fido.ru.emacs >> >> >> Поковырялся тут немного с xemacs-ом. >> Вижу вот такие странности. >> >> (if >> (string-match >> "\\({[^{}|]+\\)}\\|\\(\\)" >> "{A|A}") >> (list >> (match-beginning 1) >> (match-beginning 2))) >> >> --> (nil 0) >> >> (if >> (string-match >> "{\\([^{}|]+\\)}\\|\\(\\)" >> "{A|A}") >> (list >> (match-beginning 1) >> (match-beginning 2))) >> >> --> (1 0) >> >> GNU Emacs в обоих случаях работает правильно и дает (nil 0) >> Это в хемахе так было задумано? >> > > Вообще тут ситуация такая, это рeгекспы: > > "\\({[^{}|]+\\)}\\|\\(\\)" [1] > > "{\\([^{}|]+\\)}\\|\\(\\)" [2] > > не совсем правильные, и поэтому результат матчинга может быть > имплементно зависимым. Не совсем правильные они с той стороны что > нельзя сказать где первая часть до |. > > В случае [1] это или \\({[^{}|]+\\)} (1*) или просто } (1**) - > неопределенность. > > В случае [2] это или {\\([^{}|]+\\)} (2*) или может \\([^{}|]+\\)} > (2**), или просто } (2***)- неопределенность. > > лучше явно определить это, например > > \\(\\({[^{}|]+\\)}\\|\\(\\)\\) - для (1*) > \\({[^{}|]+\\)\\(}\\|\\(\\)\\) - для (1**) > > \\({\\([^{}|]+\\)}\\|\\(\\)\\) - для (2*) > {\\(\\([^{}|]+\\)}\\|\\(\\)\\) - для (2**) > {\\([^{}|]+\\)\\(}\\|\\(\\)\\) - для (2***) > > Надеюсь помог, спасибо. > > -- > lg > -- lg