【问题标题】:Regular Expression to match only one angle bracket正则表达式只匹配一个尖括号
【发布时间】:2013-05-25 08:15:44
【问题描述】:

我正在寻找与 '>' 匹配的正则表达式

a > b
>
b>
...

但不是两个或多个尖括号,即它应该匹配

a>>b
>>
b>>
...

我肯定会使用前瞻或后视来做到这一点,但出于某种原因,两者都没有

\>(?!\>)

也没有

(?<!\>)\>

工作..?

谢谢!

【问题讨论】:

  • 您需要更具体地了解您所指的“正则”表达式的种类,因为这对我来说听起来不像是一种真正的正则语言。

标签: regex lookahead lookbehind


【解决方案1】:

Perl 语法:

/(?<!>)>(?!>)/

不使用前瞻或后瞻:

/(?:^|[^>])>(?:[^>]|$)/

【讨论】:

    【解决方案2】:

    perreal 的第一个正则表达式是正确的。但是,该答案中给出的第二个正则表达式在一种情况下巧妙地失败了。由于它同时捕获前后字符,因此不会同时找到由单个字符分隔的两个&gt;s。

    这是一个只使用前瞻的正则表达式,没有这个问题:

    (?:^|[^>])(>)(?:$|(?!>))
    

    Edit live on Debuggex

    【讨论】:

    • (?:^|[^&gt;])(&gt;)(?=$|[^&gt;]), IMO 会更简洁。
    【解决方案3】:

    这里的问题是,当您使用前瞻时,您匹配的是第二个 &gt;(在第二个 &gt; 之后没有 &gt;),而当您使用后瞻时,您匹配的是第一个&gt;

    你可能会使用这个:

    [^>]>[^>]
    

    有一个&gt;,之前或之后没有&gt;

    但我认为为了满足您的确切需求,需要同时使用前瞻和后瞻:

    (?<!>)>(?!>)
    

    【讨论】:

    • 没有理由逃避&gt;。它不是一个特殊的正则表达式字符。
    • @Treecj 您能否将答案标记为已接受以表明您的问题已解决? ^^
    猜你喜欢
    • 2015-04-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多