-
RISEBY
尝试使用以下模式:(?<=,|^)(rss-latest|listing-latest-no-category|category-128|page-9000)(?=,|$)我所做的唯一更改是添加边界标记^和$环视以匹配输入的开始和结束。脚本:$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]);这打印:Array( [0] => page-9000 [1] => rss-latest)
-
慕哥9229398
这是使用explodeand的非正则表达式方式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)
-
一只名叫tom的猫
的(?<=\,)和(?=,) 所需要的存在的,对匹配图案的两侧。您还想在字符串的开头/结尾进行匹配,这就是您需要明确告诉匹配,字符串的开头/结尾或使用双重否定逻辑与否定外观内的否定字符类的地方。您可以使用(?<![^,])(?:rss-latest|listing-latest-no-category|category-128|page-9000)(?![^,])查看正则表达式演示在这里,(?<![^,])匹配字符串位置或 a 的开头,并(?![^,])匹配字符串位置或的结尾,。现在,您甚至不需要捕获组,您可以使用非捕获组来消除它的开销,(?:...). preg_match_all不必为子匹配分配内存,结果数组会更干净。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 )