在PHP上阅读有关Regexp(TuxRadar)的在线资源。 根据作者的说法,以下不应该将“aaa1”与模式匹配,因此返回false(0),但我得到了真(1)。
<?php
$str = "aaa1";
print preg_match("/[a-z]+[0-9]?[a-z]{1}/", $str);
?>
为什么?
答案 0 :(得分:7)
你确定那里不应该有$
吗?没有它,返回true会很有意义 - 第一个[a-z]
块与前两个a
个字符匹配,[0-9]
不匹配,最后一个[a-z]
匹配第三个a
。尾随1
将被忽略。
查看该书的链接,似乎确实存在错误:
必须以小写字母结尾
仅当正则表达式锚定到带有$
的字符串末尾时才会出现这种情况。
答案 1 :(得分:3)
匹配,因为[0-9]?
匹配数字零或一次。
<?php
$str = "aaa1";
print preg_match("/[a-z]+[0-9]+[a-z]{1}/", $str);
?>
不会导致匹配。
答案 2 :(得分:2)
让我们分解正则表达式
因此,由于[0-9]是可选的,1匹配aa,2将不匹配,3匹配a