2016-07-28 97 views
1

如果使用PCRE未包含单个qoutes,我想用双引号替换双引号。一些实例中,意思是输入=>输出替换不包含单引号的双引号

"foo" => 'foo' 
'foo' => 'foo' 
abc "foo" => abc 'foo' 
foo "bar", "baz" => foo 'bar', 'baz' 
abc 'foo "bar" baz' => abc 'foo "bar" baz' 

我试图^([^'"]*)"([^'"]*)"随修饰m multi-line和“克global`。只要每行不超过一个“xyz”块(第4行中失败),就可以工作。

编辑:我忘了提,我目前的替代是$1'$2'

+2

试试[''[^'] *'(* SKIP)(* F)|“'](https://regex101.com/r/rR1mA2/1) –

+0

@WiktorStribiżew:太好了,非常感谢这很有效果 – Andy

+0

该解决方案仅适用于输入字符串没有转义序列的情况。是否可以使用单引号进行转义? –

回答

3

下面该解决方案将只在情况下输入字符串的工作有没有转义序列

/'[^']*'(*SKIP)(*F)|"/ 

regex demo

  • '[^']*' - 匹配单引号,0+字符而不是单引号e和一个单引号再次
  • (*SKIP)(*F) - 放弃了比赛,从目前的指数继续PCRE动词序列(你可以在How do (*SKIP) or (*F) work on regex? SO post阅读更多的是)
  • | - 或...
  • " - 一个双引号。

如果有转义序列,则需要编写解析器。