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

Тема в разделе "Регулярные выражения", создана пользователем b7186, 14 авг 2013.

Статус темы:
Закрыта.
Модераторы: xpert13
  1. b7186

    b7186

    Регистр.:
    19 янв 2011
    Сообщения:
    728
    Симпатии:
    92
    Не очень разбираюсь в регулярках, но суть следующая. Есть плагин для ФФ, который позволяет проверять содержание html кода страницы по списку значений. Помогите составить регулярку, которая будет отмечать, если на странице:
    1) Встречается 3 и более раз слово KEY
    2) Встречается 3 и более раз последовательность из 6 чисел
    В первом случае одно и тоже слово, во втором случае числа могут быть любые, но количество знаков строго ограничено. Пробовал разобраться самостоятельно вот по этому мануалу Перейти по ссылке, но не преуспел.
     
  2. zek24

    zek24

    Moderator
    Регистр.:
    14 ноя 2009
    Сообщения:
    782
    Симпатии:
    242
    Вроде так:
    1) |.*?KEY.*?KEY.*?KEY.*?|gi
    2)| .*?\d{6}.*?\d{6}.*?\d{6}.*?|gi
     
    b7186 нравится это.
  3. BDSG

    BDSG

    Регистр.:
    28 фев 2009
    Сообщения:
    203
    Симпатии:
    109
    примерно так:
    1. ((?:.*)?KEY(?:.*)?){3,}
    2. ((?:.*)?\d{6}(?:.*)?){3,}
     
    b7186 нравится это.
  4. xpert13

    xpert13 <(*_*)>

    Moderator
    Регистр.:
    7 ноя 2008
    Сообщения:
    182
    Симпатии:
    456
    BDSG, твой вариант никуда не годится. У zek24 читабельность регулярки выше, хотя расширяемость хуже. А у тебя регулярка перенасыщена лишними и ни на что не влияющими конструкциями. Вот мой вариант (коротко и легко изменять количество) :

    1. (.*?KEY){3}
    2. (.*?\d{6}){3}
     
    zek24 и b7186 нравится это.
  5. BDSG

    BDSG

    Регистр.:
    28 фев 2009
    Сообщения:
    203
    Симпатии:
    109
    xpert13, твоя регулярка только для определения наличия вхождений, но никак не годится для их подсветки..
    моя, впрочем, тоже.. ))
    уже с час голову ломаю как одной регуляркой задачу решить..
     
  6. b7186

    b7186

    Регистр.:
    19 янв 2011
    Сообщения:
    728
    Симпатии:
    92
    А для первого варианта вот так норм будет, как думаете?
    (?:KEY[\s\S]*){3,}
     
  7. xpert13

    xpert13 <(*_*)>

    Moderator
    Регистр.:
    7 ноя 2008
    Сообщения:
    182
    Симпатии:
    456
    BDSG, в задании не говорится, что нужно подсветить слова, а только найти страницы, которые соответствуют некоторым условиям.

    b7186, смотря какая цель. Если просто проверить наличие в тексте трех KEY - то ваш вариант избыточен, так как будет искать больше, и на очень больших документах возможны задержки. Лучше работать до первого совпадения. Хотя бы так: (?:KEY[\s\S]*){3}
     
    b7186 нравится это.
  8. b7186

    b7186

    Регистр.:
    19 янв 2011
    Сообщения:
    728
    Симпатии:
    92
    Спасибо. Кстати, xpert13, а почему ваш вариант не хочет обрабатывать значение с точкой, хотя без точки нормально работает?
    Допустим (?:ул\.[\s\S]*){3} работает, а ваш (.*?ул\.){3} нет?
     
  9. xpert13

    xpert13 <(*_*)>

    Moderator
    Регистр.:
    7 ноя 2008
    Сообщения:
    182
    Симпатии:
    456
    Потому что точка - это любой символ кроме переносов строки (при использовании стандартных модификаторов рег. выражений). У вас текст многострочный, потому и не срабатывает, так как по сути ищет 3 совпадения в одной строке.
     
  10. b7186

    b7186

    Регистр.:
    19 янв 2011
    Сообщения:
    728
    Симпатии:
    92
    Ну я же ее экранирую, или это не важно?
     
Статус темы:
Закрыта.