0

以下示例是关于使用前瞻断言作为条件的。我在 PHP 手册中找到它:http ://www.php.net/manual/en/regexp.reference.conditional.php

(?(?=[^a-z]*[a-z])
\d{2}-[a-z]{3}-\d{2}  |  \d{2}-\d{2}-\d{2} )

这是关于这个正则表达式的描述:

条件是一个肯定的前瞻断言,它匹配一个可选的非字母序列,后跟一个字母。换句话说,它测试主题中是否存在至少一个字母。如果找到一个字母,则将主题与第一个选项进行匹配;否则它与第二个匹配。此模式匹配 dd-aaa-dd 或 dd-dd-dd 两种形式之一的字符串,其中 aaa 是字母,dd 是数字。

谁能告诉我为什么我们在这个例子中使用前瞻断言作为条件?为什么我们不使用lookbehind assertion?当它们被用作这样的条件时,我会感到困惑,因为我不知道它们如何匹配主题字符串。提前致谢!

4

1 回答 1

1

在这种情况下,我们使用前瞻断言来决定使用哪个正则表达式。看起来它正在决定表单的匹配日期01-Jan-1201-01-12. 前瞻断言查看我们尝试匹配的内容中是否有任何字母,如果有,则使用\d{2}-[a-z]{3}-\d{2}来尝试和匹配01-Jan-12,如果没有,则使用\d{2}-\d{2}-\d{2}来尝试和匹配01-01-12

于 2012-07-30T11:19:58.470 回答