2

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

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

但是,查找之前不带引号的右括号的相同逻辑似乎匹配所有右括号,即使是之前带引号的括号。有任何想法吗?

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

1 回答 1

2

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

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

原因是向前看是(?!...)看正则表达式引擎当前位置的右侧。因此,如果您想匹配 a]并在其前面执行前瞻,则正则表达式引擎将根据]自身进行检查,这(当然)不是'.

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

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

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

(顺便说一句,您通常不需要 escape ]。如果没有开头[,它永远不会被误认为是元字符。)

于 2012-10-24T23:50:27.793 回答