PHP Conference Japan 2024

锚点

在字符类之外,在默认匹配模式下,插入符号字符(^)是一个断言,只有当当前匹配点位于主题字符串的开头时才为真。在字符类内部,插入符号(^)具有完全不同的含义(见下文)。

如果涉及多个备选方案,则插入符号(^)不必是模式的第一个字符,但如果模式要匹配该分支,则它应该是出现在每个备选方案中的第一项。如果所有可能的备选方案都以插入符号(^)开头,即如果模式仅限于匹配主题的开头,则称该模式为“锚定”模式。(还有其他结构会导致模式被锚定。)

美元字符($)是一个断言,只有当当前匹配点位于主题字符串的末尾,或紧接在作为字符串最后一个字符的换行符之前(默认情况下)时才为true。如果涉及多个备选方案,则美元($)不必是模式的最后一个字符,但它应该是出现在任何分支中的最后一项。美元在字符类中没有特殊含义。

可以通过在编译或匹配时设置PCRE_DOLLAR_ENDONLY选项来更改美元的含义,使其仅匹配字符串的绝对末尾。这不会影响\Z断言。

如果设置了PCRE_MULTILINE选项,则插入符号和美元字符的含义会发生变化。在这种情况下,它们分别匹配内部“\n”字符之后和之前,以及匹配主题字符串的开头和结尾。例如,模式/^abc$/在多行模式下匹配主题字符串“def\nabc”,但在其他情况下则不匹配。因此,在单行模式下由于所有分支都以“^”开头而被锚定的模式在多行模式下不会被锚定。PCRE_DOLLAR_ENDONLY选项如果设置了PCRE_MULTILINE则会被忽略。

请注意,序列\A、\Z和\z可用于在两种模式下匹配主题的开头和结尾,并且如果模式的所有分支都以\A开头,则它始终会被锚定,无论是否设置了PCRE_MULTILINE

添加注释

用户贡献注释

此页面没有用户贡献的注释。
To Top