试图理解用php处理正则表达式

试图理解用php处理正则表达式,php,regex,Php,Regex,我试图理解用php处理正则表达式的意义。到目前为止,我的代码是: PHP代码: $string = "This is a 1 2 3 test."; $pattern = '/^[a-zA-Z0-9\. ]$/'; $match = preg_match($pattern, $string); echo "string: " . $string . " regex response: " , $match; 为什么$match总是返回0,而我认为它应该返回1 字符类末尾需要一个量词,例

我试图理解用php处理正则表达式的意义。到目前为止,我的代码是:
PHP代码:

$string = "This is a 1 2 3 test.";

$pattern  = '/^[a-zA-Z0-9\. ]$/';
$match = preg_match($pattern, $string);

echo "string: " . $string . " regex response: " , $match; 

为什么$match总是返回0,而我认为它应该返回1

字符类末尾需要一个量词,例如
+
,这意味着匹配1次或多次


.

[a-zA-Z0-9\.]
表示一个字母数字或“.”或“.”字符。您将要重复此模式:

$pattern  = '/^[a-zA-Z0-9. ]+$/';
                            ^
                      "one or more"

注意:您不需要在字符组内转义。

以下是您的意思:

  • ”/
    :启动表达式
  • ^
    :字符串的开头
  • [a-zA-Z0-9\.]
    :任何一个字母数字字符、句点或空格(如果您想匹配任何空格字符,实际上应该使用
    \s
    作为空格)
  • $
    :字符串结尾
  • /”
    :结束表达式
因此,产生匹配结果的字符串示例如下:

$string='a'

另一方面,如果您实际上试图从结果中获取匹配项,则需要使用
preg\u match
的第三个参数:


$numResults=preg_match($pattern,$string,$matches)

害怕我的4秒领先优势而颤抖!:P@alex4秒添加解释;o) 您可能不需要在角色组中转义这个句点,但它仍然以这种方式工作,并且使程序员的意图显而易见,所以继续这样做。写不可穿透的正则表达式非常容易,所以这是一个concision不是你的朋友的例子。@Rob另一方面,你也会对反斜杠是应该匹配还是应该逃逸感到困惑。不管怎样,如果你问我,这都是一团糟,我喜欢在简洁方面犯错误。@等等,你想用正则表达式验证人们的名字?请停下来。即使在英语中也有很多不寻常的名字(比如奥康纳),但世界各地都有这么多不同的名字,总有一天你会惹人生气的。过度验证从来都不是好事,如果人们愿意,他们无论如何都会输入无意义的内容。您可能希望区分
/
(分隔符)和
^
(开始锚定符),因为您的示例表明,它们一起表示字符串的开头。此外,如果OP希望匹配所有空白字符(有时不匹配),则只能对空格使用
\s
。解决了这个问题,你就得到了我的+1:D