了解preg_match_all函數(shù)
在學(xué)習(xí)PHP中的正則表達(dá)式時(shí),一個(gè)非常實(shí)用的函數(shù)是preg_match_all。這個(gè)函數(shù)可以根據(jù)正則表達(dá)式匹配指定字符串中的所有匹配值。 例如,在下面的代碼中,使用【.】表示匹配除回車之外的所有字符
在學(xué)習(xí)PHP中的正則表達(dá)式時(shí),一個(gè)非常實(shí)用的函數(shù)是preg_match_all。這個(gè)函數(shù)可以根據(jù)正則表達(dá)式匹配指定字符串中的所有匹配值。
例如,在下面的代碼中,使用【.】表示匹配除回車之外的所有字符,而【*】表示匹配前面的字符0次、1次或多次。當(dāng)它們一起使用時(shí),就表示貪婪匹配。但是如果我們在【.*】后面加上【?】,就可以禁止貪婪匹配。
preg_match_all('/(.*?)/', $str, $matches);
控制返回?cái)?shù)組的順序
在調(diào)用preg_match_all函數(shù)時(shí),如果傳入第四個(gè)參數(shù)PREG_PATTERN_ORDER,返回的數(shù)組$matches將按照一定的順序排列。但是如果不指定這個(gè)參數(shù),默認(rèn)情況下返回的數(shù)組元素順序是一樣的。
// 默認(rèn)情況下的返回?cái)?shù)組
Array (
[0] > Array (
[0] > Hello World!
[1] > This is a test.
)
)
如果我們傳入第四個(gè)參數(shù)PREG_SET_ORDER,返回的數(shù)組$matches將按照匹配的值進(jìn)行重新組裝。
// 使用PREG_SET_ORDER的返回?cái)?shù)組
Array (
[0] > Array (
[0] > Hello World!
)
[1] > Array (
[0] > This is a test.
)
)
獲取匹配字符串的位置
如果在調(diào)用preg_match_all函數(shù)時(shí)傳入第四個(gè)參數(shù)PREG_OFFSET_CAPTURE,返回的數(shù)組$matches不僅包含匹配的字符串,還會(huì)包括匹配字符串在原字符串中的位置。
// 使用PREG_OFFSET_CAPTURE的返回?cái)?shù)組
Array (
[0] > Array (
[0] > Array (
[0] > Hello World!
[1] > 0
)
)
[1] > Array (
[0] > Array (
[0] > This is a test.
[1] > 13
)
)
)
通過了解preg_match_all函數(shù)以及傳入不同的參數(shù),我們可以更好地處理復(fù)雜的字符串,實(shí)現(xiàn)靈活的正則表達(dá)式匹配。