Последовательный поиск регуляркой

12
TAFF
На сайте с 28.08.2008
Offline
140
1201

Здравствуйте!

Такая проблема - произвожу поиск до первого найденного результата, посредством нескольких регулярок объединённых в одну следующей конструкцией:

((регулярка №1)|(регулярка №2)|(регулярка №3))

Получается регулярки ищут по принципу - первое что найдено (из трёх) то и результат.

Мне же нужно искать по принципу - ищем первой регуляркой, если не найдено - то второй, если не найдено то третьей и.т.д.

Как это можно осуществить?

Ps: решить проблему необходимо только силами регулярок

✓ Администрирование (/ru/forum/494299) | ✓ Домены (/ru/forum/298049) | ✓ Продажа аккаунтов narod.ru (/ru/forum/585347)
Str01tel
На сайте с 27.12.2009
Offline
26
#1

попробуйте конструкцию типа

if (preg_match(регулярка1)){


}elseif (preg_match(регулярка2)) {

}elseif (preg_match(регулярка3)) {

}
V
На сайте с 14.08.2010
Offline
2
#2

> Получается регулярки ищут по принципу - первое что найдено (из трёх) то и результат.

> Мне же нужно искать по принципу - ищем первой регуляркой, если не найдено - то второй, если не найдено то третьей и.т.д.

Не пойму, чем первое от второго отличается :)

Пишу скрипты на PHP, python, ruby (/ru/forum/531834)
TAFF
На сайте с 28.08.2008
Offline
140
#3

Str01tel, Дописал в первый пост:

TAFF:
Ps: решить проблему необходимо только силами регулярок

TAFF добавил 16.08.2010 в 00:20

verdegal:
Что-то разницы не уловил.

Регулярки ищут одновременно по трём типам, и выдают первое найденное (из трёх). А мне необходимо искать с приоритетом по убыванию:

TAFF:
ищем первой регуляркой, если не найдено - то второй, если не найдено то третьей и.т.д.

То есть например если 2-я регулярка увидела результат, и 1-я тоже но дальше по тексту (напоминаю, я ищу по первому найденному) то мне нужно получить то что нашла 1-я, т.к. она имеет приоритет выше.

Str01tel
На сайте с 27.12.2009
Offline
26
#4
Ps: решить проблему необходимо только силами регулярок

я наверное чего-то не понимаю )

функция preg_match как раз для регулярок, она ищет вхождения и помещает найденное в массив

http://www.softtime.ru/dic/id_dic=137&id_group=3

V
На сайте с 14.08.2010
Offline
2
#5

TAFF, нифига не понял. Покажите конкретный пример, где у вас не получается использовать конструкцию (a|b|c) так, как вы хотите. Т.е. покажите реальную регулярку и реальный текст, по которому она рыскает.

TAFF
На сайте с 28.08.2008
Offline
140
#6

Str01tel, я не использую PHP, и не могу сделать данную конструкцию (if/else)

verdegal:
TAFF, нифига не понял. Покажите конкретный пример, где у вас не получается использовать конструкцию (a|b|c) так, как вы хотите. Т.е. покажите реальную регулярку и реальный текст, по которому она рыскает.

регулярка:

((1)|(2)|(3))

текст:


3
2
1

Тут я получу в результате поиска (до первого найденого как мне нужно) цифру 3

А мне нужно получить результат 1 т.к. первая регулярка должна иметь выше приоритет.

V
На сайте с 14.08.2010
Offline
2
#7

Теперь понял, но как сделать не знаю :)) А что вы используете, какой-то специализированный инструмент для обработки текста регулярными выражениями?

LEOnidUKG
На сайте с 25.11.2006
Offline
1678
#8
Ps: решить проблему необходимо только силами регулярок

размечтались :)

На каком языке делаете? или в блокноте поиск строите? :)

✅ Трастовых площадок под размещение статей и ссылок. Опыт 15 лет! ( https://searchengines.guru/ru/forum/675690 ) ⭐ Купить вечные трастовые ссылки для сайта ( https://getmanylinks.ru/?srh ) ⭐ Новый аналог AllSubbmitter https://getmanylinks.ru/getmanysubmits.html (Бесплатное демо)
DeveloperRu
На сайте с 27.02.2009
Offline
72
#9

а можно в регулярке указать приоритет? если нет, то придется три раза просматривать текст

Ответы на вопросы (http://telenok.com)
S
На сайте с 14.04.2008
Offline
60
#10

TAFF,

нужно что-то с негативным просмотром назад, типа / (1) | ((?<!1).*?(2)) | ((?<![12]).*?(3)) /sx (s-для того, чтобы переносы строки сопоставлялись точке, х для того, чтобы в шаблоне игнорировались пробелы - так проще читать; и да, я НЕ проверял корректность срабатывания :))

Вообще в языке регулярных выражений есть и поиск по условию (?(?=если)то|иначе)... Нужно покурить хорошенько документацию. Думаю, что ваша задача разрешима силами только регэкспов...

12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий