我的格式是日期:
26-4-03或26/04/03或26.4.3
它是Backreference Constructs的工作变体:
\b\d{1,2}(\/|\.|\-)\d{1,2}\1(\d{1,2))\b
但是我可以这样写吗?
\b(\d{1,2})(\/|\.|\-)\1\2\1\b
可能存在任何具有类似语法的变体吗?
答案 0 :(得分:2)
不,反向引用构造意味着断言文本与它引用的捕获组匹配的文本相同。它没有重用子模式的含义。
顺便说一下,你的正则表达式可以改写为:
\b\d{1,2}([/.-])\d{1,2}\1\d{1,2)\b
可以在字符类[/.-]
中干净地声明分隔符。 .
在字符类中失去了它的特殊含义,只是文字.
。请注意-
在字符类中是特殊的,必须进行转义,或放在字符类的开头或结尾以抑制特殊含义。
(我删除了最后一个捕获组,因为我认为它是多余的 - 如果需要,请将其添加回来)。
作为旁注,在PCRE / Perl正则表达式中,子例程调用构造(?n)
,其中n
是一个引用捕获组(和等效构造)的数字将允许您在捕获组内重用该模式(并且还用于递归正则表达式)。
\b(\d{1,2})([/.-])(?1)\2(?1)\b
请注意,在PCRE中,子程序调用构造是 atomic ,这意味着引擎不会回溯。在Perl中,引擎允许回溯。