正则表达式仅匹配一个尖括号

时间:2013-05-25 08:15:44

标签: regex lookahead lookbehind

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

a > b
>
b>
...

但不是两个或多个有角度的括号,即匹配

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

我肯定会用前瞻或外观来做到这一点,但出于某种原因,

\>(?!\>)

,也不

(?<!\>)\>

工作..?

谢谢!

3 个答案:

答案 0 :(得分:4)

Perl语法:

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

不使用前瞻或后视:

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

答案 1 :(得分:1)

perreal的第一个正则表达式是正确的。然而,在该答案中给出的第二个正则表达式在一个条件中巧妙地失败。由于它会捕获前后的字符,因此不会同时找到由单个字符分隔的两个>

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

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

Regular expression image

Edit live on Debuggex

答案 2 :(得分:0)

这里的问题是,当您使用前瞻时,您将匹配第二个>(在第二个>之后没有>),并且当您使用lookbehind时,您将匹配第一个>

你可能会用这个:

[^>]>[^>]

>之前或之后没有>

但我认为,为了满足您的需要,需要使用前瞻和后视两者:

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