2010-05-17 98 views
0

我一直在看這些代碼,它應該符合我的$輸入字符串和$ [0]店「測試」爲什麼preg_match不返回1?

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

有什麼不對它匹配?

回答

4

(?<=)是正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]從捕獲組,這是你想要什麼範圍內獲取文本。

+0

+1您還可以刪除原始正則表達式中的「^」。 – 2010-05-17 22:28:29

+0

在原始正則表達式中刪除'^'可能會改變Felix的含義和匹配的內容,因爲它現在會部分匹配諸如''abc:testing''之類的東西,而原始正則表達式非常清楚地看着整個字符串只要。 – Amber 2010-05-17 22:37:20

+0

謝謝你非常翔實。 – JavaRocky 2010-05-17 22:57:38