PHP8.1.21版本已发布
vue8.1.21版本已发布
jquery8.1.21版本已发布

正则表达式 - php正则匹配内容?

原创
2016-07-06 13:53:55 1399浏览

$s= #sayhi‍
   aaa
   #牢骚‍
    bbb 
    #test
    ccc

想要匹配出

#sayhi#牢骚#test

这种标签,
于是用:

preg_match_all("/#[a-zA-Z0-9\x{4e00}-\x{9fa5}]+/u", $s, $catspan);

匹配出的$catspan是

   Array ( [0] =>
      Array ( 
          [0] => #sayhi‍
            aaa #牢骚‍
            bbb #test 
            ) 
         )
     
 
 

接下来该怎么办?

回复内容:

$s= #sayhi‍
   aaa
   #牢骚‍
    bbb 
    #test
    ccc

想要匹配出

#sayhi#牢骚#test

这种标签,
于是用:

preg_match_all("/#[a-zA-Z0-9\x{4e00}-\x{9fa5}]+/u", $s, $catspan);

匹配出的$catspan是

   Array ( [0] =>
      Array ( 
          [0] => #sayhi‍
            aaa #牢骚‍
            bbb #test 
            ) 
         )
     
 
 

接下来该怎么办?

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

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

$pattern = "/\]+\>[^\/";

preg_match_all('/]+>#[^/', $s, $catspan);

我的正则会这么写:

]*?>#[\s\S]*?

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

声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。