Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex:在重用模式/组时,我可以命名一个模式/组来压缩代码吗?_Regex_Regex Group - Fatal编程技术网

Regex:在重用模式/组时,我可以命名一个模式/组来压缩代码吗?

Regex:在重用模式/组时,我可以命名一个模式/组来压缩代码吗?,regex,regex-group,Regex,Regex Group,我想命名或引用一个分组模式以供重用,而无需在该模式上强制执行类似的匹配来缩短我的正则表达式 我相信有一些例子对这样做有更明显的好处,但假设我想匹配由六个以冒号分隔的2位十六进制数字组成的字符串,例如38:f8:b7:90:45:92 我提出的模式是(?:[0-9A-Fa-f]{2}:){5}[0-9A-Fa-f]{2} [0-9A-Fa-f]{2}用于表示一个2位数的十六进制数,我称之为十六进制模式。我不想在冒号后重复第二次,我想用一种方法来命名这个或其他东西,这样我可以缩短我的正则表达式 我已

我想命名或引用一个分组模式以供重用,而无需在该模式上强制执行类似的匹配来缩短我的正则表达式

我相信有一些例子对这样做有更明显的好处,但假设我想匹配由六个以冒号分隔的2位十六进制数字组成的字符串,例如
38:f8:b7:90:45:92

我提出的模式是
(?:[0-9A-Fa-f]{2}:){5}[0-9A-Fa-f]{2}

[0-9A-Fa-f]{2}
用于表示一个2位数的十六进制数,我称之为十六进制模式。我不想在冒号后重复第二次,我想用一种方法来命名这个或其他东西,这样我可以缩短我的正则表达式

我已经尝试了
(?:(?[0-9A-Fa-f]{2}):{5}\k
,但它不是我创建的原始十六进制模式,它似乎只与找到的最后一个十六进制模式匹配。例如,在
38:f8:b7:90:45:92
上运行此正则表达式基本上将模式转换为
([0-9A-Fa-f]{2}):{5}45
,因为45是找到的原始十六进制模式的最后一个匹配项

因此,只有像
00:18:12:c1:5a:5a
这样的最后两个两位数相同的数字才会匹配


有没有一种方法可以命名一个模式以便完全重用?

如果支持,您可以使用

这可能看起来像:

(?:([0-9A-Fa-f]{2}):){5}(?1)
   ^                    ^^^^

或按姓名:

(?:(?<x>[0-9A-Fa-f]{2}):){5}(?&x)
   ^^^^^                    ^^^^^
(?:(?[0-9A-Fa-f]{2}):{5}(?&x)
^^^^^                    ^^^^^

如果支持,您可以使用

这可能看起来像:

(?:([0-9A-Fa-f]{2}):){5}(?1)
   ^                    ^^^^

或按姓名:

(?:(?<x>[0-9A-Fa-f]{2}):){5}(?&x)
   ^^^^^                    ^^^^^
(?:(?[0-9A-Fa-f]{2}):{5}(?&x)
^^^^^                    ^^^^^

如果以pcre为例,如果它是pcre为例,如果它是pcre(例如,如果它是pcre为例,你可以递归第一个子模式
<例如如果是pcre(例如:(([0-9A-9A-FaA-Fa-Fa-Fa-Fa-Fa-Fa-Fa-f[0-9A-9A-Fa-Fa-f]{{{2}:{2}::::){{2}::{5}(5}(5}(5)5}(5}(5}(0-9A-9A-9A-9A-9A-FaA-Fa-FaA-Fa-Fa-Fa-Fa-Fa-Fa-Fa-Fa-Fa-Fa-Fa-Fa-Fa-Fa-Fa-Fa-Fa-Fa-Fa-Fa-Fa-Fa-f-f x)
,.第一个答案看起来更短,但第二个答案正是我想要的!谢谢不客气。它不短,但您也可以通过定义组来改变它,第一个
(?[0-9A-Fa-f]{2})(?::(?&x)){5}
,第一个看起来短,但第二个答案正是我想要的!谢谢不客气。它不短,但您也可以通过首先定义组
(?[0-9A-Fa-f]{2})(?:(?&x)){5}