Regex 如何通过第9个反向引用对正则表达式进行分组?
好的,我试着在记事本++中分组通过第9个backreference。维基上说,我可以使用组命名来通过第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. (?…),(?
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