以下示例是关于使用前瞻性断言作为条件。我发现它在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是数字。
有谁能告诉我为什么我们在本例中使用lookahead断言作为条件吗?为什么我们不使用lookbehind断言?当我们将它们用作这样的条件时,我感到困惑,因为我不知道它们如何匹配主题字符串。提前致谢!
你能否解释我的第二个问题:为什么在这种情况下我们不使用lookbehind断言? – 2012-07-30 12:41:20
因为我们想知道*事先*我们需要使用哪个正则表达式。如果我们在字符串的开始处使用lookbehind,则没有任何匹配,并且在那之后我们丢失了一些我们想要匹配的数据。 – Gareth 2012-07-30 13:43:03
感谢您的回答! – 2012-07-30 15:26:05