Программирование > Регулярные выражения
Вырезка текста
Phoinix:
metton
Приношу извинения... опечатался, не ? а $ - окончание строки....
P.S. Последний ремикс:
$text =~s /^.*\\[s\\:\\s*(([А-Яа-яё\\w]+)|([А-Яа-яё\\w]+[А-Яа-яё\\s\\w]+[А-Яа-яё\\w]+))\\s*\\].*\\[\\/s](.*$)|(.*\\n$)/$1/gi;
metton:
2Phoinix
Хочу извиниться - поторопился... Забавно, но, оказалось, что тот треклятый (:)) метасимвол \'?\' даже очень значим в шаблонах типа /.*?/. Читая "книгу с верблюдом" сегодня, обнаружил сей факт (причём где-то во введении). \'?\' в вышеуказанном шаблоне играет роль уменьшения жадности квантификаторов (в данном случае \'*\'). Т.е. шаблон ищет не самое длинное соответствие шаблону, а, наоборот, - самое короткое. И самое забавное - это то, что данный факт позволяет хорошо оптимизировать твой шаблон.
Т.е. для строки "Some text 1 [s: Some text 2] Some text 3 [/s] Some text 4", чтобы вытащить "Some text 2", используем такое:
$text =~ /.*?\\[s\\:\\s*(.*?)\\]/i;
А после, соответственно, находим "Some text 2" в $1.
Чтобы вытащить ещё что-то из этой строки, действуешь соответственно.
ОФФТОП:
2ALL
Я где-то читал, что локальные наборы символов по идее должны входить в класс \\w. А у меня почему-то не входят, а входит только в \'.\' От чего это зависит?
Phoinix:
metton
Насколько я понял в класс \\w входят только латинские символы, цифры и _ , а с кириллицей возникает проблема, поэтому и приходится дополнительно задавать кириллические символы:
[а-яА-ЯёЁ\\w]
metton:
2Phoinix
Так есть точка, в которую входят и кириллические.
Alone:
"." соответствует ЛЮБОМУ символу (исключя \\n, по умолчанию)
Навигация
Перейти к полной версии