Re: 2Евгений Зайцев : прокомментируй , вроде с регекспами в xemacs разбирался.
Zajcev Evgeny <[email protected]> Fri, 17 Dec 2004 14:09:55 +0300
| Newsgroups | gmane.emacs.xemacs.user.russian |
|---|---|
| Organization | Home |
| Message-ID | <[email protected]> |
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