正则表达式匹配像<a>, <bb>, <ccc> but not <abc></abc></ccc></bb></a>这样的标签

时间:2010-06-24 13:23:06

标签: regex

我需要一个正则表达式来匹配看起来像<A><BB><CCC>但不是<ABC><aaa><>的标签。所以标签必须由相同的大写字母组成,重复。我试过了<[A-Z]+>,但这不起作用。当然我可以写一些像<(A+|B+|C+|...)>之类的东西,但我想知道是否有一个更优雅的解决方案。

1 个答案:

答案 0 :(得分:8)

你可以使用这样的东西(see this on rubular.com):

<([A-Z])\1*>

这使用捕获组和反向引用。基本上是:

  • 您使用(pattern)“捕获”匹配
  • 然后,您可以在模式中使用\n,其中n是组号,以“返回”该组匹配的内容

所以在这种情况下:

  • 第1组捕获([A-Z]),紧跟在<
  • 之后的大写字母
  • 然后我们会看到我们是否可以匹配\1*,即同一个字母中的零个或多个

参考