问题
I'm looking for a regular expression that matches the '>' in
a > b > b> ...
but not two or more angled brackets, i.e. it should not match
a>>b >> b>> ...
I was sure to do that with lookaheads or lookbehinds, but for some reason neither
\>(?!\>)
nor
(?<!\>)\>
work..?
Thanks!
回答1:
Perl syntax:
/(?<!>)>(?!>)/
Without using lookahead or lookbehind:
/(?:^|[^>])>(?:[^>]|$)/
回答2:
perreal's first regex is correct. However, the second regex given in that answer subtly fails in one condition. Since it captures characters both before and after, two >
s separated by a single character will not both be found.
Here is a regex which only uses forward lookaheads and doesn't have that problem:
(?:^|[^>])(>)(?:$|(?!>))
Edit live on Debuggex
回答3:
The issue here is that when you use the lookahead, you're matching the second >
(there's no >
after the second >
), and when you're using the lookbehind, you're matching the first >
.
You could probably use this:
[^>]>[^>]
There's a >
, with no >
before or after it.
But I think that to suit what you exactly need, need to use lookaheads and lookbehinds both:
(?<!>)>(?!>)
来源:https://stackoverflow.com/questions/16747723/regular-expression-to-match-only-one-angle-bracket