Регулярное выражение для соответствия только одной угловой скобке

Я ищу регулярное выражение, которое соответствует '>' в

a > b
>
b>
...

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

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

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

\>(?!\>)

ни

(?<!\>)\>

Работа..?

Спасибо!


person Treecj    schedule 25.05.2013    source источник
comment
Вам нужно будет более конкретно указать типы регулярных выражений, которые вы имеете в виду, поскольку для меня это не похоже на настоящий регулярный язык.   -  person Gian    schedule 25.05.2013


Ответы (3)


Синтаксис Perl:

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

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

/(?:^|[^>])>(?:[^>]|$)/
person perreal    schedule 25.05.2013

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

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

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

Изображение регулярного выражения

Прямое редактирование в Debuggex

person Sergiu Toarca    schedule 25.05.2013
comment
Было бы чище написать (?:^|[^>])(>)(?=$|[^>]), ИМО. - person Tim Pietzcker; 25.05.2013

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

Вероятно, вы могли бы использовать это:

[^>]>[^>]

Есть >, без > ни до, ни после него.

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

(?<!>)>(?!>)
person Jerry    schedule 25.05.2013
comment
Нет причин убегать >. Это не специальный символ регулярного выражения. - person melwil; 25.05.2013
comment
@Treecj Не могли бы вы пометить ответ как принятый, чтобы указать, что ваша проблема решена? ^^ - person Jerry; 13.10.2013