好的,所以我尝试使用我的文本编辑器(崇高文本)在正则表达式模式下进行查找和替换。我在包含[some_text]的多个文件中有数百个字符串需要转换为[' some_text']。以下内容适用于匹配和替换起始括号后的引号:
find: \[(?!')
replace: ['
然而,找到之前没有引号的结束括号的相同逻辑似乎匹配所有结束括号,即使之前有引号的那些。有什么想法吗?
find: (?!')\]
replace: ']
答案 0 :(得分:2)
在第二种情况下,你需要使用lookbehind而不是lookahead:
find: (?<!')\]
replace: ']
原因是前瞻(?!...)
看起来在正则表达式引擎的当前位置的右侧。因此,如果您想匹配]
并在其前面执行前瞻,则正则表达式引擎将针对]
本身检查该内容,当然({当然)不是'
。
另一方面,lookbehind位于正则表达式引擎当前位置的左侧,这正是您想要的。
请注意,在这两种情况下,外观都不会消耗任何字符!检查它们不会提升正则表达式引擎的位置。这就是为什么环视方向是相关的。
您可以阅读有关外观和正则表达式引擎内部here的更多详细信息。
(正如旁注,你通常不需要逃避]
。如果没有开头[
,它永远不会被误认为是元字符。)