Регулярное выражение для точного соответствия строки? - PullRequest
12 голосов
/ 13 августа 2010

Я предрежу этот вопрос, упомянув, что, хотя я далеко не гуру регулярных выражений, они не совсем чужды мне.Построение регулярного выражения для поиска шаблона внутри определенной строки, как правило, не является для меня проблемой, но у меня есть (может быть?) Уникальная ситуация.

У меня есть набор значений, скажем:

028938
DEF567987
390987.456
GHI345928.039

Я хочу сопоставить определенный набор строк, например:

  • Строки, состоящие ровно из 6 цифр
  • Строки, состоящие ровно из 6 цифр, десятичное число, за которыми следуют ровно еще 3 цифры

В приведенных выше примерах первое и третье значениядолжно совпадать.

Я использую регулярные выражения:

[0-9]{6}
[0-9]{6}.[0-9]{3}

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

Итак, мой вопрос в двух словах: как написать регулярное выражение, точно и полностью совпадающее со строкой, без дополнительных символов справа или слева от сопоставленного шаблона?Есть ли термин для этого типа соответствия?(Google не помог.) TIA

Ответы [ 5 ]

42 голосов
/ 13 августа 2010

используйте ^ и $ для соответствия начала и конца вашей строки

^[0-9]{6}$
^[0-9]{6}\.[0-9]{3}$

Ссылка: http://www.regular -expressions.info / anchors.html

Также, как отметил Микаэль Свенсон, вы можете использовать границу слова \b, если вы ищете этот шаблон в большом фрагменте текста.

Ссылка: http://www.regular -expressions.info/wordboundaries.html

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

^\d{6}(\.\d{3})?$
4 голосов
/ 13 августа 2010

Вы можете использовать ^, чтобы требовать сопоставления в начале строки, и $, чтобы требовать конца строки

^[0-9]{6}\.[0-9]{3}$

[0-9] также можно записать как \ d

^\d{6}\.\d{3}$

Вы также можете использовать \b для границ слов, если вы хотите, чтобы ваш шаблон соответствовал строке, например. пробелы в них

\btest\b

будет соответствовать слову test в этой строке

this is a test for matching
2 голосов
/ 13 августа 2010
^\d{6}$
^\d{6}\.\d{3}$

- правильные шаблоны, которые вы можете проверить их только 6 цифр и 6 цифр точка 3 цифры .

^\d{6}((\.\d{3}$)|$)

будет соответствовать либо 6 цифр, либо 6 цифр точка 3 цифры

Рубуляр твой друг!

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

Я думаю, вы хотите что-то вроде этого:

"^\d{6}(\.\d{3})?$"

вам нужно экранировать «точку», поскольку это «любой» символ в регулярном выражении.

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

Соответствует этому регулярному выражению:

"^\d{6}((\.\d{3}$)|$)"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...