|
ru.perl- RU.PERL ---------------------------------------------------------------------- From : Artem Chuprina 2:5020/371.32 23 Aug 2000 14:26:10 To : Vladimir Sidorenko Subject : Re: Маленькие -------------------------------------------------------------------------------- <Vladimir_Sidorenko@p32.f438.n50.z2.fidonet.org> wrote: VS> имеем: $_="fl033-rd Of June\n" VS> нyжно: $1="fl03"; VS> $2="3-rd Of June"; VS> не pаботает: m/(^\w+\d{2})(+)\n/g ^^^ VS> pаботает: m/(^\w+\d{2})(\d|\w.+)\n/g VS> Q: Почемy ? Скорее всего, из-за подчеркнутого выражения. Чего-то я такого в синтаксисе регексов не помню... А если там имелось в виду .+, то потому что \d - это тоже \w, и потому съедаются все три цифры. Второе работает потому что "-" - это не \w. Поэтому часть все выражение отрабатывает как (^\w+\d{2})(\w.+)\n с соответствием \w+ = "fl", \d{2} = "03", \w = "3", .+ = "-rd Of June". В другой ситуации не сработает и это, например, на строке fl0323-rd Of June\n" выдаст в результате "fl032" и "3-rd Of June\n". А то, что тебя интересует, в зависимости от того, как оно тебя интересует, записывается либо (^\D+\d{2})(.+) - "строка начинается с одной или более не-цифры, далее две цифры" либо (^\w+?\d{2})(.+) - "строка начинается с одного или более wordchar, но как можно меньше, далее две цифры" либо (^[^\W\d]+\d{2})(.+) - "строка начинается с одного или более wordchar, не являющегося цифрой (дословно - "не non-word char и не цифра"), далее две цифры" Соответственно, первое будет оставлять в $2 "3-rd Of June" еще и на строке "&%&^%033-rd Of June\n", второе - на строке "0033-rd Of June\n", третье наиболее близко к тому, чего ты вроде бы хотел (заметим, ты этого не сформулировал, ограничился примером. А зря). -- Счастливо! Ран. --- ifmail v.2.14.os-p7-tma3 * Origin: MemoNet (2:5020/371.32@fidonet) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.perl/17121281551f3.html, оценка из 5, голосов 10
|