在php中写入一个插曲脚本时,我遇到了一个很奇怪的行为(至少对我来说是这样 ) 。 我的正则表达式包含许多不同的文字结尾模式, 似乎符合第二个可接受的选项, 即使第一个选项完全可以。
整个表达方式是这样的(你真的不需要注意这一点):
([kpt])1([aou])$|(?:(n)t)?([auo])$|([aeou][^aeiouyäö]+[aeiou])$|([auo][^aeiouyäö]+)$|([^aeiouyäö])(?!6)([^aeiouyäö])(e)$|((?:[auo]i|[auo])[^aeiouyäö]*)([aeiouyäö])10$
毋庸置疑,我首先怀疑我犯了一个错误, 于是我轻轻地哑了这番话, 终于走到了这个阶段:
([aeiou])$|(.+)$
字面意思应该是“在字符串结尾处匹配一个元音,然后作为后置引用 1 或如果它失败了,则在字符串结尾处匹配任何字符的任意次数,然后将其作为后置引用 2 ”
当用于像 foo
Id 这样的字符串时, 期望表达式的第一部分( ([aeiou])$
) 将被使用。 而第二个则被使用, 这让我困惑 。
如果删除了该量化符, 则使用第一个选项。 我猜这与表达式部件的贪婪或特殊性有关, 虽然我认为表达式是左向右测试 。
谁能解释一下这个行为吗?