亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

用正則表達式匹配逗號之間的整個單詞,或開頭的逗號,或結尾的逗號

用正則表達式匹配逗號之間的整個單詞,或開頭的逗號,或結尾的逗號

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 關注
  • 625 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號