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

Php 解释正则表达式/^[a-zA-Z]*/,php,regex,string,Php,Regex,String,我理解正则表达式模式必须匹配以以下字符的组合和重复开头的字符串: a-z A-Z 空白字符 而且字符串的结束方式没有限制 第一例 因此,诸如uoi897868(任何仅以空格、a-z或a-z开头的字符串)之类的字符串与模式匹配。。。(当然有) 第二种情况 但问题是类似于76868678jugghjiuh(任何只以空格以外的字符开头的字符串,a-z或a-z)的字符串也匹配这不应该发生 我也使用php函数preg_match()进行了检查,该函数返回true(即模式匹配字符串)。 还使用了其他在线

我理解正则表达式模式必须匹配以以下字符的组合和重复开头的字符串:

  • a-z
  • A-Z
  • 空白字符
  • 而且字符串的结束方式没有限制


    第一例 因此,诸如
    uoi897868
    (任何仅以空格、
    a-z
    a-z
    开头的字符串)之类的字符串与模式匹配。。。(当然有)

    第二种情况 但问题是类似于
    76868678jugghjiuh
    (任何只以空格以外的字符开头的字符串,
    a-z
    a-z
    )的字符串也匹配这不应该发生


    我也使用php函数
    preg_match()
    进行了检查,该函数返回true(即模式匹配字符串)。 还使用了其他在线工具,如
    regex101
    regexr.com
    。字符串与模式不匹配。
    有人能帮我理解为什么模式与第二种情况中描述的字符串匹配吗?

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

    /^[a-zA-Z ]*/
    
    您的正则表达式将匹配以任意数量(包括零)的字母或空格“开头”的字符串

    ^
    表示“字符串开头”,而
    *
    表示“零或更多”

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

    您可能想要:

    /^[a-zA-Z ]+/
    

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

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

    为此,请使用
    +

    /^[a-zA-Z ]+/
    

    您的正则表达式是完全无用的:它将很容易地匹配任何字符串(空、非空、带数字、不带…),而不管其结构如何

    这是因为

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

    您需要使用
    +
    而不是
    *
    来强制执行至少一个字符。

    ^
    表示“字符串的开头”,因此regex表示“以”任意数量的字母或空格开头。请注意,
    *
    表示“0或更多”。而
    *
    表示“任何数量的”,包括zilch。实际上,
    *
    表示0或更多的字母或空格。如果不是一个字母或空格,那么它匹配0次:-)是一个很好的正则表达式测试工具,有解释。@JayBlanchard:它确实匹配。它恰好匹配零个字符,所以没有显示。