正则表达式 - php正则匹配内容?
黄舟
黄舟 2017-04-10 18:00:40
[PHP讨论组]
$s= <span class="atwho-inserted" data-atwho-at-query="#">#sayhi</span>‍
  &nbsp;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>

这种标签,
于是用:

preg_match_all("/<span class=\"atwho-inserted\" .*>#[a-zA-Z0-9\x{4e00}-\x{9fa5}]+<\\/span>/u", $s, $catspan);

匹配出的$catspan是

   Array ( [0] =>
      Array ( 
          [0] => <span class="atwho-inserted" data-atwho-at-query="#">#sayhi</span>‍
           &nbsp;aaa <span class="atwho-inserted" data-atwho-at-query="#">#牢骚</span>‍
            bbb <span class="atwho-inserted" data-atwho-at-query="#">#test</span> 
            ) 
         )
     
 
 

接下来该怎么办?

黄舟
黄舟

人生最曼妙的风景,竟是内心的淡定与从容!

全部回复(4)
巴扎黑

preg_match_all("/<span class=&quot;atwho-inserted&quot; .*>#[a-zA-Z0-9x{4e00}-x{9fa5}]+<\/span>/u", $s, $catspan);

问题在这个.*上,正则默认是贪婪匹配,而.本身就代表所有字符,自然包括>在内,所以就把后面的内容都匹配进去了。
通过修改为.*?可以实现非贪婪匹配,这样就能正确结束于>上,获得你想要的结果。

黄舟
$pattern = "/\<span [^\>]+\>[^\<]+\<\/span\>/";

大家讲道理
preg_match_all('/<span[^>]+>#[^<]+<\\/span>/', $s, $catspan);
PHP中文网

我的正则会这么写:

<span class="atwho-inserted"[^<>]*?>#[\s\S]*?</span>

不清楚你的写法是什么情况。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号