正則表達式 - php正則匹配內容?
原文地址:https://www.php.cn/php-weizijiaocheng-285574.html
原文有點亂,有重複的地方,我稍微修改了下。
$s= '<span class="atwho-inserted" data-atwho-at-query="#">#sayhi</span>
aaa
<span class="atwho-inserted" data-atwho-at-query="#">#牢騷</span>
bbb
<span class="atwho-inserted" data-atwho-at-query="#">#test</span>
ccc';
想要匹配出
<span class="atwho-inserted" data-atwho-at-query="#">#sayhi</span>
<span class="atwho-inserted" data-atwho-at-query="#">#牢騷</span>
<span class="atwho-inserted" data-atwho-at-query="#">#test</span>
於是用:原文有點亂,這裏我修改了一下
原文(好像有誤)
$pattern = "/<span class="\"atwho-inserted\"" .*="">#[a-zA-Z0-9\x{4e00}-\x{9fa5}]+<\\/span>/u";
preg_match_all($pattern , $s, $catspan);
修改後
$pattern = '/<span class="atwho-inserted" .*?>.*?<\/span>/u';
preg_match_all($pattern, $s, $catspan);
匹配出的$catspan是
array (
0 =>
array (
0 => '<span class="atwho-inserted" data-atwho-at-query="#">#sayhi</span>',
1 => '<span class="atwho-inserted" data-atwho-at-query="#">#牢騷</span>',
2 => '<span class="atwho-inserted" data-atwho-at-query="#">#test</span>',
),
)
接下來該怎麼辦?
問題在這個.*
上,正則默認是貪婪匹配,而.
本身就代表所有字符,自然包括>
在內,所以就把後面的內容都匹配進去了。
通過修改爲.*?
可以實現非貪婪匹配,這樣就能正確結束於>
上,獲得你想要的結果。
$pattern = "/\<span [^\="">]+\>[^\<]+\<\/span\>/";
preg_match_all('/<span[^>]+>#[^<]+<\\/span>/', $s, $catspan);
我的正則會這麼寫
<span class="atwho-inserted" [^<="">]*?>#[\s\S]*?</span>
不清楚你的寫法是什麼情況。