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

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

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

    b7186

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

    zek24

    Moderator
    Регистр.:
    14 ноя 2009
    Сообщения:
    776
    Симпатии:
    230
    Вроде так:
    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
    Симпатии:
    453
    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
    Симпатии:
    91
    А для первого варианта вот так норм будет, как думаете?
    (?:KEY[\s\S]*){3,}
     
  7. xpert13

    xpert13 <(*_*)>

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

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

    b7186

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

    xpert13 <(*_*)>

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

    b7186

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