regex 查找双括号中的单词并添加一个字符

laawzig2  于 2023-05-30  发布在  其他
关注(0)|答案(1)|浏览(105)

我想匹配包含在双括号中的任何单词,并添加一个额外的字符(使用Notepad++或EmEditor)。例如以下文本:

[[test]], look at my [[test|testing]] how it tests; I have a [[test]],you know a [[test, and more test]] and [[there's another test you know]]

应该成为

[[test한]], look at my [[test한|testing한]] how it tests; I have a [[test한]],you know a [[test한, and한 more한 test한]] and [[there한's한 another한 test한 you한 know한]]

到目前为止,我只能匹配完整的内容:\[\[.*?\]\]

b91juud3

b91juud31#

严格的正则表达式版本将是

(?:\G(?!\A)|\[\[)(?:(?!\[\[|]]).)*?\K\w+(?=.*?]])

这个正则表达式只在[[]]中查找一个或多个单词字符。参见regex demo
不太严格的模式将是

(?:\G(?!\A)|\[\[)(?:(?!\[\[|]]).)*?\K\w+

请注意结尾处缺少的lookahead。这个正则表达式只在[[]]内部或[[和字符串结尾之间找到一个或多个单词字符。看看这个regex demo
如果你的文本只包含平衡良好的方括号,你可以选择一个正则表达式,它将匹配任何零个或多个字符之前的任何单词,而不是后面跟着]]的方括号:

\w+(?=[^][]*]])

参见this regex demo
$0表示整个匹配值的所有三种情况下,替换将是$0한

图案详情

  • (?:\G(?!\A)|\[\[)-前一个匹配的结束((?!\A)不包括来自\G的字符串位置的开始)或[[
  • (?:(?!\[\[|]]).)*?-任意一个字符(除了换行符字符,如果 * .匹配换行符 * 为OFF,否则包括换行符),零次或多次出现,但尽可能少,这不是[[]]字符序列的起始点(因此,只在[[]]之间进行匹配,但这本身并不要求]]就在那里)
  • \K-一个匹配重置操作符,它从总体匹配值中丢弃到目前为止匹配的文本
  • \w+-一个或多个单词字符
  • (?=.*?]])-一个积极的前瞻,需要零个或更多的字符,而不是换行符字符(如果 * .匹配换行符 * 选项为OFF,否则包括换行符),尽可能少,然后]]

相关问题