如何在记事本++替换中分隔正则表达式组号?
Posted
技术标签:
【中文标题】如何在记事本++替换中分隔正则表达式组号?【英文标题】:How to delimit a regex group number in notepad++ replacement? 【发布时间】:2017-01-09 23:37:21 【问题描述】:我想指定一个捕获的组,然后在替换术语中指定一个文字数字,但文字数字被解释为组号的一部分。
鉴于这个(人为的)例子:
Input text: A5
Find: (.)(.)
Replace: $16
Expected result: A6
Actual result: <blank>
实验表明 $16
被解释为“第 16 组”。
我尝试使用$1\6
来制作6
文字,这给了我第1 组,但\6
是空白的 - 即结果只是A
。 $1\\6
给了我A\6
。
一般问题是,“我如何指定第 1 组,然后指定文字数字”?
【问题讨论】:
你只需要$16
@WiktorStribiżew 我找不到任何记事本++ 帮助。您应该将其发布为答案。
【参考方案1】:
记事本 S&R 正则表达式由 Boost 正则表达式库提供支持。
明确的 $n
反向引用是通过 ID 周围的大括号 () 实现的,因此,您可以在此处使用
$16
作为替代。
Notepad++ 还支持以 \
开头的 BRE 样式反向引用(\1
、\2
等*直到 9
)。因此,当您在替换模式中使用\16
时,引擎只会将其解析为反向引用1 + 文字符号6
。您可以通过将1234567890A
中的\11
替换为(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)
来检查它。结果,您将获得11
而不是A
(第11 组)。 $11
替换将导致 A
。
Notepad++ help 提到了这些符号,但缺少细节:
$n
,$n
,\n
返回与编号为 n 的子表达式匹配的内容。不允许负指数。
【讨论】:
是的,因为这些是 BRE 样式的反向引用,并且只支持 1 到 9 个这样的反向引用。 帮助页面的开头段落有一个链接(参见“在实施者的网站上”)到正则表达式语言的完整细节。我看不到替换语言的链接,但可以在 boost.org/doc/libs/1_48_0/libs/regex/doc/html/boost_regex/… 找到。可以在***.com/a/16104946/546871 找到这两个文档的链接以上是关于如何在记事本++替换中分隔正则表达式组号?的主要内容,如果未能解决你的问题,请参考以下文章