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