【问题标题】:Regex to match tags like <A>, <BB>, <CCC> but not <ABC>正则表达式匹配 <A>、<BB>、<CCC> 等标签,但不匹配 <ABC>
【发布时间】:2010-06-24 13:23:05
【问题描述】:

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

【问题讨论】:

    标签: regex


    【解决方案1】:

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

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

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

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

    所以在这种情况下:

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

    参考文献

    【讨论】:

    • @John:确实,为什么不从“什么是正则表达式”开始。
    猜你喜欢
    • 2011-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多