2010-11-08 2 views
0

Предположим, что у нас есть строка определенной длины, которая может содержать некоторые разделители, которые используются только для удобства просмотра.Regexp определенной длины, игнорируя указанные символы

Пример: 9-цифровая строка, "123456789", которые могут быть представлены как "123,456,789" или "123.456.789" или "1-234-5-67-89" или "123 456 789"

Что мне нужно, это регулярное выражение, которое может считать длину, игнорирующую эти разделители. Нечто подобное [\d|,\.\-\s]{9}, но только с \ д отсчет в {9} (любое количество разделителей Символы ..., необязательно, символы-ограничители не должен превышать два подряд)

+0

Вы не используете «разделитель», но означает «разделитель»? Или вы? ** QUOTE **: * разделитель *: «символ» или «строка», который устанавливает ограничения на текстовый объект произвольного размера, а не путать с «разделителем» или «терминатором». «Разграничить» на самом деле просто означает «окружить» или «заключить» (например, эти круглые скобки). – tchrist

+0

Конечно, «разделитель». Извините за мой английский :) – manuna

ответ

4
^[-.,\s]*(?:\d[-.,\s]*){9}$ 

, необязательно, символы-ограничители не должен «т больше двух подряд:

^[-.,\s]{0,2}(?:\d[-.,\s]{0,2}){9}$ 
+0

Сразу после публикации вопроса я пришел к чему-то подобному, отчасти как: (\ d [\ -] {0,1}) {11,13} (в моем случае^и $ - не требуется, поскольку поиск проходит через фрагмент текста) Тем не менее, интересно, что добавляет к этому выражению «(?:)»? Обычно ли это предпочтительнее «()», если нам не нужны обратные ссылки? – manuna

+0

@manuna: Верно. – kennytm

0

Вместо того, чтобы беспокоить мою голову о поиске подходящего регулярное выражение, которое может сделать это, я бы предпочел использовать более простые регулярные выражения либо:

  • найти все цифры и проверить количество совпадений, или
  • удалить все разряды и проверить длину оставшихся.
Смежные вопросы