PCRE "or" 运营商行为?

PCRE "or" operator behavior?

如果我有 1) /foo|oo/ 2) /oo|foo/ 并使用 PCRE 并将其与字符串 "foo" 进行匹配,则预期结果为

  1. 1) foo 2) oo。 PCRE 保持 "OR" 秩序。
  2. foo。 PCRE 尝试所有变体并进行最长匹​​配。
  3. 没有预设规则,优化器可能会根据需要重新排序。开发人员有责任避免出现这种模棱两可的情况。
  4. 有规则但不是2.

"Try it and see"好像是杀了1。)但是没有办法通过反复试验来确定2-3-4之间。

4) 获取最接近字符串开头的匹配项。当从当前位置开始可能有多个匹配项时,尽快匹配匹配的选项。

例如

banana 匹配 /na/(显示大写匹配):baNAna(早于 banaNA)。针对 /an|b/,匹配 Banana(早于 bANana)。针对 /ba|./,匹配 BAnana(相同位置,因此 ba 匹配 . 之前)。针对 /.|ba/,匹配 Banana(相同位置,因此 . 匹配 ba 之前)。