2015-03-26 3 views
-5

Как написать «и» в Regex. Как мы можем написать «или» используя трубу | так же есть способ, чтобы написать «и»Как написать «и» в Regex

У меня есть

  • REGEX1: ^(?!([0-9])\1{2}[-. ]*\1{3}[-. ]*\1{4}$) который проверяет ничего, кроме цифр, как 111-111-1111 или 111.111.1111 и другой
  • REGEX2: ^\(?([0-9]{3})\)?[-. ]?([0-9]{3})[-. ]?([0-9]{4})$ который проверяет номера типа 784-223-4567

Я хочу, чтобы цифра строка действительна, только если оба REGEX1 & & условия REGEX2 удовлетворены

+0

Пожалуйста, дайте пример того, что вы пытаетесь соответствовать, и то, что вы намереваетесь не совпадать. –

+0

Не могли бы вы привести пример того, когда он будет применим? Я даже не могу думать об одном. – Biffen

ответ

1

по умолчанию регулярное выражение стандарта (как определено Клини) не имеет возможности написать и: он имеет только конкатенации, дизъюнкции и Клини звезду. Однако вы можете применять регулярное выражение несколько раз. Например:

grep "regex1" < file | grep "regex2" 

Таким образом, используя трубу первый grep фильтрует все строки, которые соответствуют регулярному выражению первого и второго grep фильтрует результат еще глубже.

Если вы используете расширенной версии регулярных выражений (с положительным предпросмотром), вы можете реализовать и -pattern:

(?=regex1)(?=regex2)regex3 

Perl и большинство других P-язык поддерживают эту модель. Но большинство других языков нет.

EDIT: на основе ваших комментариев, и использовать второй шаблон, регулярное выражение гласит:

^(?=(?!([0-9])\1{2}[-. ]*\1{3}[-. ]*\1{4}$))\(?([0-9]{3})\)?[-. ]?([0-9]{3})[-. ]?([0-9]{4})$ 

regex101 demo.

+0

У меня есть регулярное выражение: REGEX1:^(?! ([0-9]) \ 1 {2} [-.] * \ 1 {3} [-.] * \ 1 {4} $), который соответствует чему угодно, кроме чисел, таких как 111-111-1111, и другое регулярное выражение говорит REGEX2:^\ (? ([0 -9] {3}) \)? [-.]? ([0-9] {3}) [-.]? ([0-9] {4}) $, который соответствует номерам вроде 789-456-1234 Мне нужно убедиться, что строка действительна только в том случае, если она удовлетворяет REGEX1 && REGEX2 –

+0

@ChristineDsouza: вы, вероятно, сделали опечатку в regex2: '(?' To '(?:' (С двоеточием)? –

+0

Нет никакой опечатки –

0

Если вы можете использовать отрицания, вы можете сделать:


Не ((не (а) | (нет (б))

+1

Большинство двигателей регулярных выражений не предоставляют 'not (.)'. –

+0

Вот почему я сказал «если». – nick5435

Смежные вопросы