解释正则表达式/ ^ [a-zA-Z] * /

时间:2015-01-07 20:58:18

标签: php regex string

据我所知,正则表达式模式必须匹配以组合开头并重复以下字符的字符串:

  1. a-z
  2. A-Z
  3. a white-space character
  4. 字符串的结束方式没有限制!


    第一案例

    所以uoiui897868之类的字符串(任何只以空格开头的字符串,a-zA-Z)都匹配模式......(当然可以)

    第二案例

    但问题是像76868678jugghjiuh这样的字符串(任何只以空格以外的字符开头的字符串,a-zA-Z)也匹配! 这不应该发生!


    我也检查过使用php函数preg_match(),它返回true(即模式匹配字符串)。 还使用了其他在线工具,例如regex101regexr.com。字符串与模式匹配。 任何人都可以帮我理解为什么模式匹配第二种情况中描述的字符串?

4 个答案:

答案 0 :(得分:5)

/^[a-zA-Z ]*/

你的正则表达式将匹配"以"开头的字符串。 任何数字(包括零)的字母或空格。

^表示"字符串的开头" *表示"零或更多"。

uoiui89786876868678jugghjiuh都以0或更多字母/空格开头,因此它们都匹配。

你可能想要:

/^[a-zA-Z ]+/

+表示"一个或多个",因此它不会匹配零个字符。

答案 1 :(得分:5)

你的正则表达式是完全无用的:它将与任何字符串(空的,非空的,带数字,没有,......)轻而易举地匹配,无论其结构如何。

这是因为

  • 使用^,强制执行字符串的开头,现在每个字符串都有一个开头。
  • 您使用的是群组[A-Za-z ],但您使用*运算符,因此0或更多重复。因此,即使字符串不包含(或以[A-Za-z ]开头的字符,匹配器也会简单地说:零匹配并解析剩余的字符串。

您需要使用+代替* 强制执行 “至少一个字符”

答案 2 :(得分:4)

您真正想要的是匹配一个或更多前面的字符。

为此你使用+

/^[a-zA-Z ]+/

答案 3 :(得分:2)

末尾的'*'量词表示该字符的零个或多个匹配,因此所有字符串都匹配。也许您想要删除通配符量词,或将其更改为'+'量词,并在末尾添加'$'来测试整个字符串。