为了账号安全,请及时绑定邮箱和手机立即绑定

用正则表达式匹配逗号之间的整个单词,或开头的逗号,或结尾的逗号

用正则表达式匹配逗号之间的整个单词,或开头的逗号,或结尾的逗号

PHP
SMILET 2022-01-08 20:02:29
我有一个这样的字符串:page-9000,page-template,page-type,page-category-128,image-195,listing-latest,rss-latest,even-more-info,even-more-tags我做了这个正则表达式,我希望得到整个标签:(?<=\,)(rss-latest|listing-latest-no-category|category-128|page-9000)(?=\,)我希望它匹配所有的出现。在这种情况下:page-9000 and rss-latest.这个正则表达式检查逗号之间的整个单词就好了,但它忽略了第一个和最后一个,因为它不在逗号之间(显然)。我也试过它检查它是否在逗号之间或开头的一个逗号或一个逗号到结尾,但是它会给我误报,因为它会匹配:category-128而字符串包含:page-category-128有什么帮助吗?
查看完整描述

3 回答

?
RISEBY

TA贡献1856条经验 获得超5个赞

尝试使用以下模式:


(?<=,|^)(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

)


查看完整回答
反对 回复 2022-01-08
?
慕哥9229398

TA贡献1877条经验 获得超6个赞

这是使用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

)


查看完整回答
反对 回复 2022-01-08
?
一只名叫tom的猫

TA贡献1906条经验 获得超3个赞

的(?<=\,)和(?=,) 所需要的存在的,对匹配图案的两侧。您还想在字符串的开头/结尾进行匹配,这就是您需要明确告诉匹配,字符串的开头/结尾或使用双重否定逻辑与否定外观内的否定字符类的地方。


您可以使用


(?<![^,])(?: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 )


查看完整回答
反对 回复 2022-01-08
  • 3 回答
  • 0 关注
  • 635 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号