2017-06-15 46 views
0

我想构造一个匹配两个组的正则表达式,第二个组包含一个单个字符,其重复次数与第一个组中的字符数相同。像^(\w+) (x{length of \1})这样的,例如hello xxxxxfoo xxx会匹配,但是hello xxxxyfoo xxy不会。这可能吗?正则表达式匹配两个不同的长度相同的组

此处的目标是匹配reStructuredText样式列表中的缩进,其中列表项中的第二行应缩进以匹配第一行中的文本的开头,排除可变长度的数字列表标记。例如,

1. If the number is small, 
    subsequent lines are typically 
    indented three spaces. 
2. Although if the first line has 
    multiple leading spaces then 
    subsequent lines should reflect that. 
11. And when the number starts to get 
    bigger the indent will necessarily 
    be bigger too. 
+1

的长度有一个在所有的土地的正则表达式可以算没有结构。有些属性可以搜集,如奇数或偶数。唯一的例外是Perl代码构造'(?{code})',它可以很容易地做到这一点。 – sln

+0

据我所知,你无法完全基于长度匹配不同的群体。如果这些组的内容是相同的,那么这将起作用的唯一方法。然后你可以使用反向引用。 –

+0

嗯,那太糟糕了。谢谢(你的)信息。 – clwainwright

回答

0

你可以,如果

  1. 您正则表达式引擎支持有条件的图案和
  2. 你愿意接受一个固定的上界重复次数做到这一点。

在这种情况下,你可以做这样的事情:

^(\w)?(\w)?(\w)?(\w)?(\w)? (?(1)x)(?(2)x)(?(3)x)(?(4)x)(?(5)x) 

这个例子将匹配高达5

+0

OP是否确实指定了重复字符只是'x'? – Olian04

+0

绝对凌乱,但它的作品。谢谢。 – clwainwright

相关问题