#регулярные_выражения
Можно-ли используя регулярные выражения сделать так, чтобы включить все буквы: [a-z], но исключить некоторые, например [^ite]. То есть в итоге должно получиться что-то вроде: [a-z] & [^ite]. Сейчас приходит в голову два раза проверять символ на соответствие, сначала одному regex, потом другому.
Ответы
Ответ 1
/(?(?=[a-z])[^ite]|^$)/ Схема: (?(?=regex)then|else) Пояснение: Если [a-z], то [^ite] (выбрать из [a-z] все, кроме i, t и e), иначе ^$ (пустая строка) В случае выполнения условия выборка будет проводится из того массива совпадений, по которому была проверка. В данном случае она будет ограничена латинскими буквами. Вот тут можно посмотреть пример работы. А вот тут можно почитать подробнее об использовании условий в регулярных выражениях.Ответ 2
Если первый массив символов соответствует символьному метосимволу, например [a-z] == \pL то можно сделать просто так [^\PLite] На практике часто хотят все символы \w минус набор исключений [^ite] то есть [^\Wite] P.S. это решение на порядок быстрей отработает нежели lookahead. Обрати внимание что я в примере использую \w и \W, тоесть [^\Wa] это отрациние от отрицательного массива \W, значит найти все возможные символы из диапазно b-z (a-z минус a). А быстро это работает потому что работает "математика множест" [a-z] - [a] = [b-z]
Комментариев нет:
Отправить комментарий