3

阅读有关 Regexp(TuxRadar) 的 PHP 在线资源。根据作者的说法,以下不应将“aaa1”与模式匹配,因此返回 false(0),但我得到 true(1)。

<?php

$str = "aaa1";
print preg_match("/[a-z]+[0-9]?[a-z]{1}/", $str);

?>

为什么?

常用表达

4

3 回答 3

7

你确定那里不应该有尾随$吗?没有它,返回 true 很有意义 - 第一个[a-z]块匹配前 2 个a字符,不[0-9]匹配任何内容,最后一个[a-z]匹配 3rd a。尾随1被忽略。

查看该书的链接,那里似乎确实存在错误:

必须以小写字母结尾

仅当正则表达式使用 . 锚定到字符串的末尾时才适用$

于 2012-04-18T22:56:45.433 回答
3

它匹配是因为[0-9]?匹配一个数字次或一次。

<?php
$str = "aaa1";
print preg_match("/[a-z]+[0-9]+[a-z]{1}/", $str);
?>

不会导致匹配。

于 2012-04-18T22:56:45.463 回答
2

让我们分解正则表达式

  1. [az]+ 表示一个或多个字母,表示匹配 a、aa 或 aaa
  2. [0-9]?表示可选 - 所以可以匹配一个数字
  3. [az] 表示匹配一个字母,可能是 a

因此,由于 [0-9] 是可选的,1 将匹配 aa,2 将不匹配任何内容,3 将匹配 a

于 2012-04-18T22:59:23.653 回答