Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
Daniel_777 Гость
|
Добавлено: Вс Окт 06 2002 09:49 Заголовок сообщения: Кто шарит в регулярных выражениях Perlа? |
|
|
Как с помощью регулярного выражения выделить из строки строку "любойURL.shtml" (именно ".shtml" !!!) при этом ограничив "жадность" квантификатора (т.е чтобы возвращала не "любойURL.shtml' target='_blank" , а "любойURL.shtml")? |
|
Вернуться к началу |
|
|
MMax Гость
|
Добавлено: Вт Окт 08 2002 15:29 Заголовок сообщения: Re: Кто шарит в регулярных выражениях Perlа? |
|
|
Читай статьи на этом же сайте - Введение в Перл (Маслов ВВ):
m/PATERN/gimosx /PATERN/gimosx
Поиск в строке по патерну (шаблону). В скалярном контексте возвращает логическое значение true (1) или false (''). Если строка не указана с помощью операторов '=~' или '!~', поиск ведется в строке $_ Опции: g - Глобальный поиск. Поиск всех вхождений. i - Сравнение не зависит от регистра (верхний или нижний) m - Строка многострочная. o - однопроходная компиляция s - однострочная строка x - используются расширенные регулярные выражения.
Если '/' - ограничитель, то начальное 'm' можно опустить. С помощью него в качестве ограничителя может быть любой символ кроме пробела.
PATTERN может содержать переменные, которые будут интерполироваться (перекомпилироваться) каждый раз в момент вычисления. Переменные $) и $| не интерполируются. Если вы хотите, что бы такой шаблон интерполировался один раз - добавьте /o. Это необходимо делать в циклах поиска для увеличения быстродействия, однако, если вы измените значение переменной, Perl этого даже не заметит.
Если PATERN - нулевая строка, то используется последнее регулярное выражение.
В скалярном контексте возвращается список элементы которого - результаты выполнения выражений в скобках патерна ($1, $2, $3...). Обратите внимание что первый элемент $1.
Пример:
$a = "/usr/local/perl/perl.bin"; # Анализируемая строка
Цель: Создать массив @dirs с именами директорий. Решение: Самый простой способ воспользоваться split('\/') но в качестве примера используем скобки. @dirs =~ m[/(\w*)/(\w*)/(\w*)/(\w*)]
Здесь 'm[' - использовать квадратные скобки как ограничители. (\w*) - шаблон алфавитно-цифровой последовательности. В результате @dirs равен ('usr', 'local', 'perl') |
|
Вернуться к началу |
|
|
FFF Гость
|
Добавлено: Вт Окт 08 2002 17:32 Заголовок сообщения: Re: Кто шарит в регулярных выражениях Perlа? |
|
|
>>Как с помощью регулярного выражения выделить из строки строку "любойURL.shtml" >>(именно ".shtml" !!!) при этом ограничив "жадность" квантификатора (т.е чтобы возвращала не "любойURL.shtml' target='_blank" , а "любойURL.shtml")?
примерно так. не слишком оптимально, т.к. сам только осваиваю Perl: -------------------------------------------- $ss="8888http://f.. =~ /http(\S+?)shtml/ix; ##нахождение 1го совпадения print "\n m 1st: " , $& ;
$ss= $'; ##остаток строки после 1го совпадения $ss =~ /http(\S+?)shtml/ix; ##нахождение совпадения в остатке строки
print "\n m 2nd: " , $& ; -------------------------------------------- Дом.задание: организовать цикл для нахождения ВСЕХ вхождений в строке. Но если заведомо известно, что в строке не более одного вхождения, то не стоит и заморачиваться. |
|
Вернуться к началу |
|
|
|