Regex 如何通过第9个反向引用对正则表达式进行分组?

Regex 如何通过第9个反向引用对正则表达式进行分组?,regex,notepad++,regex-group,Regex,Notepad++,Regex Group,好的,我试着在记事本++中分组通过第9个backreference。维基上说,我可以使用组命名来通过第9个参考。然而,我似乎无法获得正确的语法来进行匹配。为了简单起见,我从两个小组开始 样本数据 1000,1000 正则表达式。 (?'a'[0-9]*),([0-9]*) 根据需要,我需要做以下工作 (?<some name>...), (?'some name'...),(?(some name)...) Names this group some name. (?…),(?

好的,我试着在记事本++中分组通过第9个backreference。维基上说,我可以使用组命名来通过第9个参考。然而,我似乎无法获得正确的语法来进行匹配。为了简单起见,我从两个小组开始

样本数据

1000,1000
正则表达式。

(?'a'[0-9]*),([0-9]*)
根据需要,我需要做以下工作

(?<some name>...), (?'some name'...),(?(some name)...)
Names this group some name.
(?…),(?“某个名字”…),(?(某个名字)…)
将此组命名为某个名称。

然而,结果是它找不到我的文本。有什么建议吗?

好的,匹配没有问题,您的示例在当前的记事本++中与我匹配。这是很重要的一点要在记事本++中使用PCRE正则表达式,您需要>=6.0的版本

另一点是,您想在哪里使用反向引用?我可以在正则表达式中使用命名的反向引用,但不能在替换字符串中使用

意味着

将匹配

1000,1001,1000
但我不知道如何在替换字符串中使用命名组或大于9的组

替换字符串中确实需要9个以上的反向引用吗?如果您只需要9个以上的组,但不是所有的组都需要替换,则在组的开头添加一个
?:
,使不需要重复使用的组成为非捕获组

(?:[0-9]*),([0-9]*),(?:[0-9]*),([0-9]*)
           group 1             group 2

您可以使用与<10的组相同的方式引用>9的组

i、 e$10是第十组

对于(天真的)示例:

字符串:

abcdefghijklmnopqrstuvwxyz

正则表达式查找:

(?:a)(b)(c)(d)(e)(f)(g)(h)(i)(j)(k)(l)(m)(n)(o)(p)

替换:

10美元

结果:

KQRStuvxyz

我的测试是在Notepad++v6.1.2中执行的,并给出了我预期的结果

更新:从v7.5.6开始,它仍然有效


讽刺地重新提出这个问题:

“如果要替换为后跟字符“0”的第一个组,该怎么办?”

要执行此操作,请将“替换”更改为:

$1\x30


它将替换为第1组和十六进制字符
30
——这是ascii中的
0

这是一个非常迟来的答案,可以帮助其他从谷歌登陆的人(就像我一样)。记事本++替换中的命名反向引用如下所示:
$+{name}
。不管什么原因

这里有一个与标准正则表达式的偏差,但是。。。命名的反向引用也给出了数字。在标准正则表达式中,如果您有
(.*)(?&)(.*)
,您将替换为
$1${name}$2
,以获得与开始时完全相同的行。在记事本++中,必须使用
$1$+{name}$3


示例:我需要清理Visual Studio.sln文件中不匹配的配置。我需要替换的文本如下所示:

    {CDDB12FE-885F-4FB7-9724-1A4279573DE5}.Dev|Any CPU.ActiveCfg = Debug|Any CPU
    {CDDB12FE-885F-4FB7-9724-1A4279573DE5}.Dev|Any CPU.Build.0 = Debug|Any CPU
    {CDDB12FE-885F-4FB7-9724-1A4279573DE5}.Dev|x64.ActiveCfg = Debug|Any CPU
    {CDDB12FE-885F-4FB7-9724-1A4279573DE5}.Dev|x64.Build.0 = Debug|Any CPU
    {CDDB12FE-885F-4FB7-9724-1A4279573DE5}.Dev|x86.ActiveCfg = Debug|Any CPU
    {CDDB12FE-885F-4FB7-9724-1A4279573DE5}.Dev|x86.Build.0 = Debug|Any CPU
    {CDDB12FE-885F-4FB7-9724-1A4279573DE5}.QA|Any CPU.ActiveCfg = Release|Any CPU
    {CDDB12FE-885F-4FB7-9724-1A4279573DE5}.QA|Any CPU.Build.0 = Release|Any CPU
    {CDDB12FE-885F-4FB7-9724-1A4279573DE5}.QA|x64.ActiveCfg = Release|Any CPU
    {CDDB12FE-885F-4FB7-9724-1A4279573DE5}.QA|x64.Build.0 = Release|Any CPU
    {CDDB12FE-885F-4FB7-9724-1A4279573DE5}.QA|x86.ActiveCfg = Release|Any CPU
    {CDDB12FE-885F-4FB7-9724-1A4279573DE5}.QA|x86.Build.0 = Release|Any CPU

我的搜索正则表达式:

  ^(\s*\{[^}]*\}\.)(?<config>[a-zA-Z0-9]+\|[a-zA-Z0-9 ]+)*(\..+=\s*)(.*)$
结果是:

    {CDDB12FE-885F-4FB7-9724-1A4279573DE5}.Dev|Any CPU.ActiveCfg = Dev|Any CPU
    {CDDB12FE-885F-4FB7-9724-1A4279573DE5}.Dev|Any CPU.Build.0 = Dev|Any CPU
    {CDDB12FE-885F-4FB7-9724-1A4279573DE5}.Dev|x64.ActiveCfg = Dev|x64
    {CDDB12FE-885F-4FB7-9724-1A4279573DE5}.Dev|x64.Build.0 = Dev|x64
    {CDDB12FE-885F-4FB7-9724-1A4279573DE5}.Dev|x86.ActiveCfg = Dev|x86
    {CDDB12FE-885F-4FB7-9724-1A4279573DE5}.Dev|x86.Build.0 = Dev|x86
    {CDDB12FE-885F-4FB7-9724-1A4279573DE5}.QA|Any CPU.ActiveCfg = QA|Any CPU
    {CDDB12FE-885F-4FB7-9724-1A4279573DE5}.QA|Any CPU.Build.0 = QA|Any CPU
    {CDDB12FE-885F-4FB7-9724-1A4279573DE5}.QA|x64.ActiveCfg = QA|x64
    {CDDB12FE-885F-4FB7-9724-1A4279573DE5}.QA|x64.Build.0 = QA|x64
    {CDDB12FE-885F-4FB7-9724-1A4279573DE5}.QA|x86.ActiveCfg = QA|x86
    {CDDB12FE-885F-4FB7-9724-1A4279573DE5}.QA|x86.Build.0 = QA|x86

希望这对其他人有所帮助。

使用\x引用组的常用语法将\10解释为对组1的引用,后跟0。
您需要使用$x和$10的替代语法

注意:有些人似乎怀疑是否有任何理由成立10个小组。

我有一个简单的例子,我想将一组名为
ddmmyyyyy\u TIME\u DDMMYYYY\u TIME的文件重命名为yyyyymmdd\u TIME\u yyyyyymmdd\u TIME,
并将我的输入匹配项替换为:
重命名“\1”“\2\5\4\3\6\u9\8\7\u10”,因为名称的开始和结束并不总是恒定的。

ouch…9回指?你确定你没有让事情变得过于复杂吗?一点也不,我正在恢复数据库数据,并使用notepad++格式化insert语句。在这种情况下,为什么不通过脚本语言生成insert语句呢?我想我可以,但是我之前用Notepad++访问过这个,试图通过第9个引用,但没有成功。所以现在我只是想让它发生。好了,它做到了,在维基中使用$sign作为群组的记录在哪里,你是怎么知道的???+1哇,我想我什么都试过了(比如\10、\g10、\g{10}),但是忘记了简单的$alternative。@meanbunny-好问题!1) 2)奇怪的是,我没有从维基上找到答案。我就这么做了。。。无法解释为什么!我想我很幸运。但是如果你想替换为第一组,后面跟着“0”这个角色呢?@讽刺地-更新了我的答案,以涵盖你的边缘案例。我想我也可以做到这一点。这也是一个很好的答案。当我看到你的时,我开始考虑在这种情况下也会起作用的组嵌套。
  $1$+{config}$3$+{config}
    {CDDB12FE-885F-4FB7-9724-1A4279573DE5}.Dev|Any CPU.ActiveCfg = Dev|Any CPU
    {CDDB12FE-885F-4FB7-9724-1A4279573DE5}.Dev|Any CPU.Build.0 = Dev|Any CPU
    {CDDB12FE-885F-4FB7-9724-1A4279573DE5}.Dev|x64.ActiveCfg = Dev|x64
    {CDDB12FE-885F-4FB7-9724-1A4279573DE5}.Dev|x64.Build.0 = Dev|x64
    {CDDB12FE-885F-4FB7-9724-1A4279573DE5}.Dev|x86.ActiveCfg = Dev|x86
    {CDDB12FE-885F-4FB7-9724-1A4279573DE5}.Dev|x86.Build.0 = Dev|x86
    {CDDB12FE-885F-4FB7-9724-1A4279573DE5}.QA|Any CPU.ActiveCfg = QA|Any CPU
    {CDDB12FE-885F-4FB7-9724-1A4279573DE5}.QA|Any CPU.Build.0 = QA|Any CPU
    {CDDB12FE-885F-4FB7-9724-1A4279573DE5}.QA|x64.ActiveCfg = QA|x64
    {CDDB12FE-885F-4FB7-9724-1A4279573DE5}.QA|x64.Build.0 = QA|x64
    {CDDB12FE-885F-4FB7-9724-1A4279573DE5}.QA|x86.ActiveCfg = QA|x86
    {CDDB12FE-885F-4FB7-9724-1A4279573DE5}.QA|x86.Build.0 = QA|x86