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