在括号内添加引号 - 正则表达式

时间:2012-10-24 23:49:38

标签: regex replace

好的,所以我尝试使用我的文本编辑器(崇高文本)在正则表达式模式下进行查找和替换。我在包含[some_text]的多个文件中有数百个字符串需要转换为[' some_text']。以下内容适用于匹配和替换起始括号后的引号:

find:      \[(?!')
replace:   ['

然而,找到之前没有引号的结束括号的相同逻辑似乎匹配所有结束括号,即使之前有引号的那些。有什么想法吗?

find:      (?!')\]
replace:   ']

1 个答案:

答案 0 :(得分:2)

在第二种情况下,你需要使用lookbehind而不是lookahead:

find:      (?<!')\]
replace:   ']

原因是前瞻(?!...)看起来在正则表达式引擎的当前位置的右侧。因此,如果您想匹配]并在其前面执行前瞻,则正则表达式引擎将针对]本身检查该内容,当然({当然)不是'

另一方面,lookbehind位于正则表达式引擎当前位置的左侧,这正是您想要的。

请注意,在这两种情况下,外观都不会消耗任何字符!检查它们不会提升正则表达式引擎的位置。这就是为什么环视方向是相关的。

您可以阅读有关外观和正则表达式引擎内部here的更多详细信息。

(正如旁注,你通常不需要逃避]。如果没有开头[,它永远不会被误认为是元字符。)