怎么样使用正则匹配一个字符串取非?[^p]例如:有这样一个字符串  “# #123 # #哈哈哈哈#”需要通过一个正则得到以 #开始,以 #结束,中间必须有字符但是不能是#通过match_all希望得到如下结果: 
1) #123 # 
2) #哈哈哈哈#

解决方案 »

  1.   

    $str= "# #123 # #哈哈哈哈#232#";
    $reg ='~(?<=&#35;)(?:(?=[^\s]+))(.*?)(?=&#35;)~';
    preg_match_all($reg,$str,$m);  
    print_r($m[0]);     
      

  2.   

    左右(?<=)和(?=)是为了捕获那些交叉的&#35;,如果实际情况不会有这个问题,就不用,效率会好很多。
      

  3.   


    写的不错,但是不能满足我的需求,可能我说的不太明白
    例如"&#35&;&#35;&#35;" 假设A = &#35; ,我要实现的就是  /A[^A]A/
    通过你上面的表达式是得不到这个结果的
      

  4.   

    那"&#35&;&#35;&#35;"这个你想要得到什么结果?
      

  5.   

    你这个/A[^A]A/,^只能排除单个字符
    以正则表示应该是/A(?:(?!A).)*A/,A可以是一个字符串
      

  6.   

    $s='abac&#35;123 &#35; slskf&#35;哈哈 &#35; ss&#35; ss';
    preg_match_all('/\&#35;[\w\W]+?\&#35;/',$s,$e);
    var_dump($e);