Regex 有没有一种方法可以;“召回”;正则表达式本身中已匹配的字符序列?

Regex 有没有一种方法可以;“召回”;正则表达式本身中已匹配的字符序列?,regex,delimiter,Regex,Delimiter,我正在搜索的正则表达式具有以下约束: 它以“/”开头 然后“[”一个非数字序列(在此列表中称为分隔符)和“]” 下一行“\n” “[“0个或多个由以前找到的分隔符“]”分隔的数字。” 例如,以下文本与正则表达式匹配: //[*#*] [1*#*34*#*64] //[*#*] [1#34#64] 以下文本与正则表达式不匹配: //[*#*] [1*#*34*#*64] //[*#*] [1#34#64] 因为分隔符在第一行中不匹配 我当前创建的正则表达式是 ^//\[(\D)+\]\

我正在搜索的正则表达式具有以下约束:

  • 它以“/”开头
  • 然后“[”一个非数字序列(在此列表中称为分隔符)和“]”
  • 下一行“\n”
  • “[“0个或多个由以前找到的分隔符“]”分隔的数字。”
例如,以下文本与正则表达式匹配:

//[*#*]
[1*#*34*#*64]
//[*#*]
[1#34#64]
以下文本与正则表达式不匹配:

//[*#*]
[1*#*34*#*64]
//[*#*]
[1#34#64]
因为分隔符在第一行中不匹配

我当前创建的正则表达式是

^//\[(\D)+\]\n\[[(\d)+(\D)+]*(\d)+\]$|^//\[(\D)+\]\n\[\]$|^//\[(\D)+\]\n\[(\d)+\]$
但显然,这个正则表达式与前面的两个例子都匹配


有没有办法“调用”正则表达式本身中已匹配的字符序列?

您需要使用反向引用,在大多数语言中,您可以使用
\n
引用匹配的组,其中
n
是组号

这种模式将起作用:

//\[([^]]++)]\n\[(?>\d++\1?)+]
要分解它:

  • /
    只匹配文本
  • \[([^]]+])]
    匹配方括号中的一些字符
  • \n
    匹配换行符
  • \[(?:\d++\1?++]
    匹配一个或多个数字,后跟在第一个模式部分捕获的匹配项(可选)。这是一个原子群

您需要使用反向引用,在大多数语言中,您可以使用
\n
引用匹配的组,其中
n
是组号

这种模式将起作用:

//\[([^]]++)]\n\[(?>\d++\1?)+]
要分解它:

  • /
    只匹配文本
  • \[([^]]+])]
    匹配方括号中的一些字符
  • \n
    匹配换行符
  • \[(?:\d++\1?++]
    匹配一个或多个数字,后跟在第一个模式部分捕获的匹配项(可选)。这是一个原子群

您需要一个名为back reference(一个非常好的教程)的东西

在Python中使用此正则表达式:

r'^/\[([^\]]+)\]\n\[\d+(\1\d+*\]'
样本运行:

>>>string=“”/[*#*]
... [1*#*34*#*64]"""
>>>打印重新搜索(r'^/\[([^\]+)\]\n\[\d+(\1\d+*\]),字符串)。组(0)
//[*#*]
[1*#*34*#*64]
将匹配Python中的字符串


您需要一个名为back reference(一个非常好的教程)的东西

在Python中使用此正则表达式:

r'^/\[([^\]]+)\]\n\[\d+(\1\d+*\]'
样本运行:

>>>string=“”/[*#*]
... [1*#*34*#*64]"""
>>>打印重新搜索(r'^/\[([^\]+)\]\n\[\d+(\1\d+*\]),字符串)。组(0)
//[*#*]
[1*#*34*#*64]
将匹配Python中的字符串


查找回溯引用。举个简单的例子,
\(.*\)\1
匹配任何形式的字符串
。也就是说,一个字符串是由一个字符串连接到它自己而成的。你使用的是什么语言?查阅引用。举个简单的例子,
\(.*\)\1
匹配任何形式的字符串
。意思是,将字符串连接到自身的字符串。您使用的语言是什么?