0
我一直在看这些代码,它应该符合我的$输入字符串和$ [0]店“测试”为什么preg_match不返回1?
$input = ':testing';
$r = preg_match('/^(?<=\:).+/',$input,$matches);
有什么不对它匹配?
我一直在看这些代码,它应该符合我的$输入字符串和$ [0]店“测试”为什么preg_match不返回1?
$input = ':testing';
$r = preg_match('/^(?<=\:).+/',$input,$matches);
有什么不对它匹配?
(?<=)
是正look- 后面,这意味着匹配封闭表达式文本必须之前发生该图案中的括号的位置。在这种情况下,这意味着它必须发生在字符串开始位置(^
)之后,但在第一个实际字符(.+
匹配字符串中的所有字符)之前,并且由于:
是第一个实际字符,并且在:
(显然)之前没有:
,它无法匹配。
相反,你可能想要做的是使用捕获组,就像这样:
$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]
从捕获组,这是你想要什么范围内获取文本。
+1您还可以删除原始正则表达式中的“^”。 – 2010-05-17 22:28:29
在原始正则表达式中删除'^'可能会改变Felix的含义和匹配的内容,因为它现在会部分匹配诸如''abc:testing''之类的东西,而原始正则表达式非常清楚地看着整个字符串只要。 – Amber 2010-05-17 22:37:20
谢谢你非常翔实。 – JavaRocky 2010-05-17 22:57:38