我想用单引号替换双引号,如果它们没有使用PCRE包围单个引号。一些例子,意思是输入=>输出
"foo" => 'foo'
'foo' => 'foo'
abc "foo" => abc 'foo'
foo "bar", "baz" => foo 'bar', 'baz'
abc 'foo "bar" baz' => abc 'foo "bar" baz'
我使用修饰符^([^'"]*)"([^'"]*)"
和' g`尝试了m multi-line
。只要不超过一个" xyz"每行阻止(第4行失败)。
编辑:我忘了提到我目前的替换是$1'$2'
答案 0 :(得分:3)
下方的解决方案仅适用于输入字符串没有转义序列的情况:
/'[^']*'(*SKIP)(*F)|"/
请参阅regex demo
'[^']*'
- 匹配单引号,0 +字符以外的单引号和单引号(*SKIP)(*F)
- PCRE动词序列丢弃匹配并从当前索引开始(您可以在How do (*SKIP)
or (*F)
work on regex? SO post上阅读更多内容)|
- 或...... "
- 双引号。如果存在转义序列,则需要编写解析器。