Шаблон регулярного выражения Необязательный символ - PullRequest
7 голосов
/ 20 августа 2010

Я хочу сопоставить строку, например 19740103-0379 или 197401030379, т. Е. Дефис не обязателен. Как мне сделать это с помощью регулярного выражения?

Ответы [ 2 ]

8 голосов
/ 20 августа 2010

Обычно вы можете просто использовать -?. В качестве альтернативы вы можете использовать -{0,1}, но вы должны обнаружить, что ? для "ноль или одно вхождение" поддерживается практически везде.

pax> echo 19740103-0379 | egrep '19740103\-?0379'
19740103-0379

pax> echo 197401030379 | egrep '19740103\-?0379'
197401030379

Если вы хотите принять 12 цифр с любым количеством штрихов, вам, возможно, придется сделать что-то вроде:

-*([0-9]-*){12}

, что в основном равно нулю или более тире, за которыми следуют 12 вхождений (цифра, за которой следует ноль или более тире), и захватит все виды замечательных вещей, таких как:

--3-53453---34-4534---

(конечно, вы должны использовать \d вместо [0-9], если ваш движок регулярных выражений поддерживает это).

1 голос
/ 20 августа 2010

Вы можете попробовать разные:

\d* соответствует строке, состоящей только из цифр

\d*-\d* соответствует строке цифр формата - тире - цифры

[0-9\-]* соответствует строке, состоящей только из тире и цифр

Вы можете объединить их с помощью | (или), чтобы у вас было, например, (\d*)|(\d*-\d*): соответствует форматам только цифры и цифры-тире-цифры.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...