2013-05-25 5 views
1

Я ищу регулярное выражение, которое совпадает с «>» в ​​Regular Expression, чтобы соответствовать только один угловой кронштейн

a > b 
> 
b> 
... 

, но не более двух или угловые скобки, то есть он должен не матч

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

Я был уверен, чтобы сделать это с lookaheads или просмотра назад, но по какой-то причине ни

\>(?!\>) 

ни

(?<!\>)\> 

работа ..?

Спасибо!

+0

Вы должны быть более конкретную информацию о видах " регулярные "выражения, которые вы имеете в виду, поскольку это не похоже на реальный обычный язык для меня. – Gian

ответ

0

Проблемы здесь в том, что при использовании предпросмотра, вы соответствие второго > (нет нет > после второго >), и когда вы используете назад ', вы соответствие первого >.

Вы могли бы использовать это:

[^>]>[^>] 

Там в >, без > до или после него.

Но я думаю, что в соответствии с того, что вам именно нужно, нужно использовать lookaheads и просмотр назад как:

(?<!>)>(?!>) 
+0

thx - работает отлично! – Treecj

+0

Нет причин скрывать '>'. Это не специальный символ регулярного выражения. – melwil

+0

@Treecj Добро пожаловать :) – Jerry

4

Perl синтаксис:

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

Без использования предпросмотра или просмотра назад:

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

Первое регулярное выражение perreal. Однако второе регулярное выражение, данное в этом ответе, тонко выходит из строя в одном условии. Поскольку он захватывает символы как до, так и после, два > s, разделенные одним символом, не будут найдены.

Вот регулярное выражение, которое использует только вперед lookaheads и не имеют этой проблемы:

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

Regular expression image

Edit live on Debuggex

+1

Было бы чище писать '(?:^| [^>]) (>) (? = $ | [^>])', IMO. –

Смежные вопросы