正則表達式 - php正則匹配內容?

                                                        正則表達式 - 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>

不清楚你的寫法是什麼情況。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章