RegExp: выбрать если есть больше Х вхождений

Статус
В этой теме нельзя размещать новые ответы.

b7186

Гуру форума
Регистрация
19 Янв 2011
Сообщения
727
Реакции
95
Не очень разбираюсь в регулярках, но суть следующая. Есть плагин для ФФ, который позволяет проверять содержание html кода страницы по списку значений. Помогите составить регулярку, которая будет отмечать, если на странице:
1) Встречается 3 и более раз слово KEY
2) Встречается 3 и более раз последовательность из 6 чисел
В первом случае одно и тоже слово, во втором случае числа могут быть любые, но количество знаков строго ограничено. Пробовал разобраться самостоятельно вот по этому мануалу Для просмотра ссылки Войди или Зарегистрируйся, но не преуспел.
 
Вроде так:
1) |.*?KEY.*?KEY.*?KEY.*?|gi
2)| .*?\d{6}.*?\d{6}.*?\d{6}.*?|gi
 
примерно так:
1. ((?:.*)?KEY(?:.*)?){3,}
2. ((?:.*)?\d{6}(?:.*)?){3,}
 
BDSG, твой вариант никуда не годится. У zek24 читабельность регулярки выше, хотя расширяемость хуже. А у тебя регулярка перенасыщена лишними и ни на что не влияющими конструкциями. Вот мой вариант (коротко и легко изменять количество) :

1. (.*?KEY){3}
2. (.*?\d{6}){3}
 
xpert13, твоя регулярка только для определения наличия вхождений, но никак не годится для их подсветки..
моя, впрочем, тоже.. ))
уже с час голову ломаю как одной регуляркой задачу решить..
 
А для первого варианта вот так норм будет, как думаете?
(?:KEY[\s\S]*){3,}
 
BDSG, в задании не говорится, что нужно подсветить слова, а только найти страницы, которые соответствуют некоторым условиям.

b7186, смотря какая цель. Если просто проверить наличие в тексте трех KEY - то ваш вариант избыточен, так как будет искать больше, и на очень больших документах возможны задержки. Лучше работать до первого совпадения. Хотя бы так: (?:KEY[\s\S]*){3}
 
Спасибо. Кстати, xpert13, а почему ваш вариант не хочет обрабатывать значение с точкой, хотя без точки нормально работает?
Допустим (?:ул\.[\s\S]*){3} работает, а ваш (.*?ул\.){3} нет?
 
Потому что точка - это любой символ кроме переносов строки (при использовании стандартных модификаторов рег. выражений). У вас текст многострочный, потому и не срабатывает, так как по сути ищет 3 совпадения в одной строке.
 
Ну я же ее экранирую, или это не важно?
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху