3 回答

TA貢獻(xiàn)1856條經(jīng)驗 獲得超5個贊
嘗試使用以下模式:
(?<=,|^)(rss-latest|listing-latest-no-category|category-128|page-9000)(?=,|$)
我所做的唯一更改是添加邊界標(biāo)記^和$環(huán)視以匹配輸入的開始和結(jié)束。
腳本:
$input = "page-9000,page-template,page-type,page-category-128,image-195,listing-latest,rss-latest,even-more-info,even-more-tags";
preg_match_all("/(?<=,|^)(rss-latest|listing-latest-no-category|category-128|page-9000)(?=,|$)/", $input, $matches);
print_r($matches[1]);
這打?。?/p>
Array
(
[0] => page-9000
[1] => rss-latest
)

TA貢獻(xiàn)1877條經(jīng)驗 獲得超6個贊
這是使用explodeand的非正則表達(dá)式方式array_intersect:
$arr1 = explode(',', 'page-9000,page-template,page-type,page-category-128,image-195,listing-latest,rss-latest,even-more-info,even-more-tags');
$arr2 = explode('|', 'rss-latest|listing-latest-no-category|category-128|page-9000');
print_r(array_intersect($arr1, $arr2));
輸出:
Array
(
[0] => page-9000
[6] => rss-latest
)

TA貢獻(xiàn)1906條經(jīng)驗 獲得超3個贊
的(?<=\,)和(?=,) 所需要的存在的,對匹配圖案的兩側(cè)。您還想在字符串的開頭/結(jié)尾進(jìn)行匹配,這就是您需要明確告訴匹配,字符串的開頭/結(jié)尾或使用雙重否定邏輯與否定外觀內(nèi)的否定字符類的地方。
您可以使用
(?<![^,])(?:rss-latest|listing-latest-no-category|category-128|page-9000)(?![^,])
查看正則表達(dá)式演示
在這里,(?<![^,])匹配字符串位置或 a 的開頭,并(?![^,])匹配字符串位置或的結(jié)尾,。
現(xiàn)在,您甚至不需要捕獲組,您可以使用非捕獲組來消除它的開銷,(?:...). preg_match_all不必為子匹配分配內(nèi)存,結(jié)果數(shù)組會更干凈。
PHP 演示:
$re = '/(?<![^,])(?:rss-latest|listing-latest-no-category|category-128|page-9000)(?![^,])/m';
$str = 'page-9000,page-template,page-type,page-category-128,image-195,listing-latest,rss-latest,even-more-info,even-more-tags';
if (preg_match_all($re, $str, $matches)) {
print_r($matches[0]);
}
// => Array ( [0] => page-9000 [1] => rss-latest )
- 3 回答
- 0 關(guān)注
- 621 瀏覽
添加回答
舉報