如果没有^ $,匹配数字的正则表达式不起作用

时间:2015-08-29 11:37:32

标签: regex

我有一个正则表达式,匹配1到28之间的数字:

[1-9]|1[0-9]|2[0-8]

如果不将其修改为:

,则无效
^([1-9]|1[0-9]|2[0-8])$

任何人都可以解释我为什么需要这个?我想在字符串之间使用它。

3 个答案:

答案 0 :(得分:1)

^$所做的只是从头到尾进行正则表达式匹配。

如果没有这些,122也会匹配(122)。

<小时/> 如果要使用它来查找子字符串,可以执行的操作是添加word boundary匹配器:

\b([1-9]|1[0-9]|2[0-8])\b

See it in action

<小时/> 另一种选择,如果您的号码可以成为单词的一部分,则使用negative lookarounds

(?!<\d)([1-9]|1[0-9]|2[0-8])(?!\d)

See it in action

答案 1 :(得分:1)

构造表达式以检查整个数字。添加锚^$可确保字符串完全匹配您的表达式,而不是匹配字符串的某些部分。

例如,字符串12345在没有锚点的情况下匹配,因为12345,{{ 1}}和12都是23的子字符串,代表123451之间的数字。

但是,对于锚点,它将不匹配,使您的第二个表达式正确。

答案 2 :(得分:0)

您应该使用锚点来匹配整个选定数字的字符串。 ^将锚定在字符串的开头,$ will将锚定在字符串的末尾。