[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Регулярка захватывает пробелы
Placido
Есть телепрограмма, в которой строки вида

0.00 Название фильма (художественный фильм).

необходимо заменить на

0.00 Х/ф "Название фильма".

Сложность в том, что между "Название фильма" и открывающей скобкой может быть один или несколько пробелов, табуляция либо ничего.

$txt = <<<TXT
0.00 Маска (художественный фильм).
1.30 Новости.
2.00 Хит-парад (итоги).
2.10 Профилактика.
9.10 Квартира(художественный фильм).
10.50 Новости.
11.20 Концерт группы "Чай вдвоем" (повтор).
13.00 Оружие Второй мировой(документальный фильм).
13.30 За спичками (художественный фильм).

TXT;

print_r(preg_replace('#(\d[.]\d{2}) ([^(\r\n]+)[\w]*[(]художественный фильм[)][.]#', '\1 Х/ф "\2".', $txt));


Этот код выводит следующее
Цитата

0.00 Х/ф "Маска ".
1.30 Новости.
2.00 Хит-парад (итоги).
2.10 Профилактика.
9.10 Х/ф "Квартира".
10.50 Новости.
11.20 Концерт группы "Чай вдвоем" (повтор).
13.00 Оружие Второй мировой(документальный фильм).
13.30 Х/ф "За спичками  ".


Т.е. регулярка "захватывает" (в \2) пробелы перед открывающей скобкой (...[\w]*[(]художественный фильм[)][.]), а нужно, чтобы пробелы и табуляции игнорировались.

У меня ступор, выручайте.



Спустя 34 минуты, 39 секунд (17.05.2012 - 10:27) Invis1ble написал(а):
preg_replace('#(\pN{1,2}\.\pN{2}) (.+?)\pZ*+\(художественный фильм\)\.#u', '$1 Х/ф "$2".', $txt)

Спустя 27 минут, 5 секунд (17.05.2012 - 10:54) Placido написал(а):
Спасибо! А что это за символьные классы - \pN и \pZ? Первый раз их встречаю.

Спустя 1 минута, 53 секунды (17.05.2012 - 10:56) Invis1ble написал(а):
\pN - цифры, \pZ - пробельные символы. В случае юникода рекомендуется применять именно их во избежание глюков. Аналоги - \d и \s

Спустя 1 минута, 27 секунд (17.05.2012 - 10:58) Placido написал(а):
Ясно. Спасибо за ликбез!

Спустя 16 секунд (17.05.2012 - 10:58) Invis1ble написал(а):
пожалуйста
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.