反向引用和非捕获组

由于组被编号,一些引擎还支持匹配组先前再次匹配的内容。

假设你想匹配两个等于长度为 3 的字符串除以 $ 的东西,你会使用:

(.{3})\$\1

这将匹配以下任何字符串:

"abc$abc"
"a b$a b"
"af $af "
"   $   "

如果你希望组不被引擎编号,你可以将其声明为非捕获。非捕获组看起来像这样:

(?:)

它们对于重复某种模式特别有用,因为一组也可以用作原子。考虑:

(\d{4}(?:-\d{2}){2} \d{2}:\d{2}.\d{3}) (.*)[\r\n]+\1 \2

这将匹配具有相同时间戳和相同条目的相邻行中的两个日志记录条目。