匹配引号中未包含的文本字符串

时间:2013-12-05 19:45:49

标签: regex

(?:'.*?')匹配单引号内的文字。我想匹配不在引号内的文本字符串。 [^(?:'.*?')]不适用于我:它匹配每个不是单引号的字符。如何更改它以匹配不在引号内的文本?

4 个答案:

答案 0 :(得分:1)

您可以使用preg_replace将所有带引号的文字替换为空字符串,以获取引号外的所有文本(假设引号均衡并且未转义):

$s = "abc '123' foo";
$r = preg_replace("/'[^']*'/", "", $s);
//=> "abc  foo"

答案 1 :(得分:0)

我不知道您的操作的目的,但您可以将字符串转换为Char数组并匹配Unicode代码。

答案 2 :(得分:0)

我从未学过php函数/方法调用,但以下正则表达式会“捕获”引号之外的文本:

(?<=^|\G)(?:'[^']*')?([^']+)

如此rubular

所示

答案 3 :(得分:0)

我认为通用方法是循环匹配和连接每个组1的值
不需要\G锚,因为字符是引用或不引用。

 #  (?:(?:'[^']*')+|((?:[^']+|'(?![^']*'))+))

 (?:
      (?:
           ' [^']* '
      )+
   |  
      (                             # (1 start)
           (?:
                [^']+               # not '
             |  
                '                   # or, ' not followed by another '
                (?! [^']* ' )
           )+
      )                             # (1 end)
 )