2

如果我使用([1-9]{1,2},){4}[1-9]{1,2}匹配输入。
1,2,3,4,5,6,7,8,9将被匹配为有效输入。

但是,如果我在开头添加^并在末尾添加$ 。表达式^([1-9]{1,2},){4}[1-9]{1,2}$1,2,3,4,5根据我的需要匹配。

^([1-9]{1,2},){4}[1-9]{1,2}$我的问题是:和有什么区别([1-9]{1,2},){4}[1-9]{1,2}?你知道,我只添加^$

你能解释为什么会发生这种差异吗?

4

3 回答 3

12

这是语法图^([1-9]{1,2},){4}[1-9]{1,2}$

^([1-9]{1,2},){4}[1-9]{1,2}$

这是语法图([1-9]{1,2},){4}[1-9]{1,2} ([1-9]{1,2},){4}[1-9]{1,2}

您可以看到 2 个正则表达式之间的区别是第一个正则表达式强制从Start字符串匹配到End字符串。

这些图表是使用Regexper生成的。

于 2013-08-21T04:32:23.670 回答
3

^表示匹配字符串的开头,$表示匹配字符串的结尾。所以它基本上意味着你的字符串必须完全匹配模式,比较:

^foo$foo作为你的正则表达式。

尝试将其与food. 第一个将不匹配,因为我们没有在foo部分之后击中字符串的末尾。

于 2013-08-21T04:29:10.740 回答
3

([1-9]{1,2},){4}[1-9]{1,2}将匹配字符串中的任何位置,即:2,,2abcd,35,54,67,23,04foobar 将匹配。

^([1-9]{1,2},){4}[1-9]{1,2}$仅当整个字符串匹配时才匹配。即:上面的例子不匹配。

^匹配字符串的开头,$结尾。

于 2013-08-21T04:29:46.460 回答