为什么这个preg_match不会返回1?

时间:2010-05-17 22:21:55

标签: php regex preg-match

我一直在看这个代码,它应该匹配我的$ input字符串和$ matches [0] store'testing'

$input = ':testing';
$r = preg_match('/^(?<=\:).+/',$input,$matches);

它出了什么问题?

1 个答案:

答案 0 :(得分:4)

(?<=)是背后的正面外观 - ,这意味着与所附表达式匹配的文本必须在之前出现在模式中括号内的位置。在这种情况下,这意味着它必须在字符串开始位置(^)之后,但在第一个实际字符(.+匹配字符串中的所有字符之前)之前,并且因为:是第一个实际角色,:之前没有:(显然),它无法匹配。

相反,您可能想要做的是使用捕获组,如下所示:

$input = ':testing';
$r = preg_match('/^:(.+)/',$input,$matches);

// $matches[0] has the entire text matched by the pattern, ":testing"
// $matches[1] will now contain "testing" from the first capture

因此,您使用$matches[1]从捕获组中获取文本,这就是您想要的。