2009-08-26 4 views
0

Я боролся с тем, чтобы получить регулярное выражение для небольшого моего проекта. Может ли кто-нибудь помочь мне с регулярным выражением, которое соответствует чему-либо внутри символов <>, но только если им не предшествует символ \?Регулярное выражение проблемы

Например:

<Escaped characters \<\> are right in the middle of this sentence.>, <Here is another sentence.> 

должны соответствовать

1: Square brackets \<\> are right in the middle of this sentence. 
2: here is another sentence. 

До сих пор мне удалось

/<([^\\][^>]*?)>/ig 

но дает

1: Escaped characters \<\ 
2: Here is another sentence. 

Что я делаю неправильно? :(

+0

отступа код на 4 пробелов или использовать кнопку коды в редакторе с текстом, который требуется отобразить, как и набрано подсвечивается. – beggs

+0

Я исправил разметку, насколько я нашел проблемы. Пожалуйста, посмотрите исходный код, чтобы увидеть, что я сделал (следуйте ссылке редактирования) и проверьте, нет ли места, которое должно быть отмечено как код. Вы также можете удалить свои комментарии. –

+0

Не удалось найти кнопки редактирования, lol. Спасибо, что вы так терпеливы. Первый раз, используя сайт, он показывает? ;) – 2009-08-26 06:34:53

ответ

1

ответ Crimson является не работает для меня в тестировании в Regex Powertoy используя <Escaped characters \<\> are right in the middle of this sentence.>, <Here is another sentence.> как тест, но это (кажется) для работы:

/<(?<!\\<).*?>(?<!\\>)/gi

дает мне два матча: <Escaped characters \<\> are right in the middle of this sentence.> и <Here is another sentence.>

Редактировать: Я взглянул на строку, которую Gumbo сказал, не соответствует. У меня нет никаких проблем, соответствующих его в regex.powertoy.org:

alt text http://img362.imageshack.us/img362/3227/regexpowertoyorg.png

В ходе тестирования я меняла оригинальный отправил регулярное выражение: /(?<!\\)<(.*?)(?<!\\)>/gi, который является более эффективным (меньше зондов).

Также я замечаю на выходе regex.powertoy.org, что четвертая строка (\<hello <match\<this\>> but not this\> looks odd... the printed replacement is just матч but the match detail clearly shows that the match is correct; матч \ . But I also notices that the first and third test string replacements don't print the " `» спасаясь угловые скобки. После того, как немного (но не исчерпывающий), играя вокруг, я думаю, что это проблема с отображением текста через javascript, экранированные угловые скобки не печатают escape-символ, а непустые угловые скобки вообще не печатаются. Я думаю, это связано с тем, что javascript видит его как HTML. Я думаю, что это регулярное выражение работает правильно, но вы должны проверить его в автономном режиме.

+0

Вот и все! Блестящий сэр, спасибо вам большое. – 2009-08-26 07:00:36

+0

Не работает для ' bar>'. – Gumbo

+0

@Gumbo: работает для меня, см. Редактирование. – beggs

0

Что вам нужно, Двойник за операторами Читайте о них здесь:.

http://www.perl.com/pub/a/2003/07/01/regexps.html

А вот выражение вам нужно:

/<(?!<\\).*>(?!<\\)/ 

Как оператор * выше жадный, он должен включать любые экранированные угловые скобки/< />

EDIT: Я предполагаю, что вы хотите получить скошенные угловые скобки t o быть согласованным и возвращенным. Если вы хотите что-то другое, просьба уточнить - дать краткий пример а) входной строки и б) матч должен быть возвращен

+0

Спасибо за ответ. Я получаю содержимое внутри каждого набора угловых скобок. Некоторые примеры ввода: «, <это текст>, есть скобки в этом>>». Это выведет три разные строки, к которым я буду обращаться с обратными ссылками. Это «пример», «это текст» и «О бог \ <\> есть скобки в этом». – 2009-08-26 06:56:10

0

Попробуйте

/<[^\\]([^>]+)>/ 
+0

Это не проверка экранированных угловых скобок, которые необходимо включить. –

1

Я хотел бы использовать это:

/<((?:[^\\>]+|\\.)*)>/ 
+0

Работает хорошо. Меньше зондов, чем у меня. – beggs

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

  • Нет связанных вопросов^_^