Помогите с регулярным выражением
От: ламмму Украина http://itjob.kharkov.ua
Дата: 08.09.06 16:12
Оценка:
Помогите с регулярным выражением, есть такой текст:

[q]bla bla <input type="text" value="bla bla >bla"> bla bla[q]

нужно выдрать тег(<...>) целяком (т.е. с учетом того что в кавычках не учитывать закрывающую скобку ">")
<b>bold text</b>
Re: Помогите с регулярным выражением
От: Smal Россия  
Дата: 08.09.06 16:17
Оценка:
Здравствуйте, ламмму, Вы писали:

Л>Помогите с регулярным выражением, есть такой текст:


Л>[q]bla bla <input type="text" value="bla bla >bla"> bla bla[q]


Л>нужно выдрать тег(<...>) целяком (т.е. с учетом того что в кавычках не учитывать закрывающую скобку ">")

Это невозможно сделать при помощи регулярного выражения.
С уважением, Александр
Re[2]: Помогите с регулярным выражением
От: Константин Л. Франция  
Дата: 08.09.06 16:57
Оценка:
Здравствуйте, Smal, Вы писали:

S>Здравствуйте, ламмму, Вы писали:


Л>>Помогите с регулярным выражением, есть такой текст:


Л>>[q]bla bla <input type="text" value="bla bla >bla"> bla bla[q]


Л>>нужно выдрать тег(<...>) целяком (т.е. с учетом того что в кавычках не учитывать закрывающую скобку ">")

S>Это невозможно сделать при помощи регулярного выражения.

сначала c помощью тех же re заменяешь все '<', '>' внутри парных кавычек на что-нибудь.
потом можно поробовать так(это perl-like syntax, должен работать в boost::regex):

(<.*>)?

а затем заменяешь '<', '>' обратно
Re[3]: Помогите с регулярным выражением
От: ламмму Украина http://itjob.kharkov.ua
Дата: 08.09.06 17:00
Оценка:
КЛ>сначала c помощью тех же re заменяешь все '<', '>' внутри парных кавычек на что-нибудь.
КЛ>потом можно поробовать так(это perl-like syntax, должен работать в boost::regex):

КЛ>(<.*>)?


КЛ>а затем заменяешь '<', '>' обратно


Спасибо, видимо это действительно самый лучший и красивый метод !
<b>bold text</b>
Re[3]: Помогите с регулярным выражением
От: Smal Россия  
Дата: 08.09.06 17:02
Оценка:
Здравствуйте, Константин Л., Вы писали:

КЛ>(<.*>)?


КЛ>а затем заменяешь '<', '>' обратно

А если внутри кавычек есть \"? или <<>><>>>?
Эта задача не решается при помощи регулярных выражений
(по крайней мере в общем случае).
С уважением, Александр
Re[4]: Помогите с регулярным выражением
От: Smal Россия  
Дата: 08.09.06 17:04
Оценка:
Здравствуйте, Smal, Вы писали:

Язык правильных скобочных последовательностей нерегулярен.
С уважением, Александр
Re: Помогите с регулярным выражением
От: Roman Odaisky Украина  
Дата: 09.09.06 11:29
Оценка:
Здравствуйте, ламмму, Вы писали:

Л>Помогите с регулярным выражением, есть такой текст:


Л>[q]bla bla <input type="text" value="bla bla >bla"> bla bla[q]


Л>нужно выдрать тег(<...>) целяком (т.е. с учетом того что в кавычках не учитывать закрывающую скобку ">")


Так в чем проблема-то?

Текст в кавычках (атрибуты HTML) определить легко, там ведь нет \":
$q = '"[^"]*"';

Для случая \" так:
$q_cstyle = '"([^\\"]|\\.)*"';

Итак, если у нас есть строка, первый символ которой '<', и нужно найти конец тега, то всё просто:
/^\<([^">]|$q)\>/o

P. S. AFAIR символ '>' в тегах недопустим, даже в кавычках. Для этого есть &gt;.
До последнего не верил в пирамиду Лебедева.
Re[4]: Помогите с регулярным выражением
От: Vladimir D Belousov Россия  
Дата: 09.09.06 13:14
Оценка:
Здравствуйте, ламмму, Вы писали:

КЛ>>сначала c помощью тех же re заменяешь все '<', '>' внутри парных кавычек на что-нибудь.

КЛ>>потом можно поробовать так(это perl-like syntax, должен работать в boost::regex):

КЛ>>(<.*>)?


КЛ>>а затем заменяешь '<', '>' обратно


Л>Спасибо, видимо это действительно самый лучший и красивый метод !


<tag prop="Quote: \". Let's do it ==>"/><tag prop="More ' quote"/>
--
Спасибо
Re[5]: Помогите с регулярным выражением
От: Roman Odaisky Украина  
Дата: 09.09.06 14:47
Оценка:
VDB><tag prop="Quote: \". Let's do it ==>"/><tag prop="More ' quote"/>

VDB>--

VDB>Думать некогда.
ага... проверять тоже, наверное
<a href="javascript: alert('Hello!')">Test 1</a><br />
<a href="javascript: alert(\"Hello!\")">Test 2</a><br />
<a href="javascript: alert(&quot;Hello!&quot;)">Test 3</a><br />
<a href="javascript: alert(&#34;Hello!&#34;)">Test 4</a><br />
<a href="javascript: alert(&#39;Hello!&#39;)">Test 5</a><br />

и вот что получается
До последнего не верил в пирамиду Лебедева.
Re[6]: Помогите с регулярным выражением
От: Vladimir D Belousov Россия  
Дата: 09.09.06 15:22
Оценка:
Здравствуйте, Roman Odaisky, Вы писали:

VDB>><tag prop="Quote: \". Let's do it ==>"/><tag prop="More ' quote"/>


VDB>>--

VDB>>Думать некогда.
RO>ага... проверять тоже, наверное
RO>
RO><a href="javascript: alert('Hello!')">Test 1</a><br />
RO><a href="javascript: alert(\"Hello!\")">Test 2</a><br />
RO><a href="javascript: alert(&quot;Hello!&quot;)">Test 3</a><br />
RO><a href="javascript: alert(&#34;Hello!&#34;)">Test 4</a><br />
RO><a href="javascript: alert(&#39;Hello!&#39;)">Test 5</a><br />
RO>

RO>и вот что получается

Чего-чего? Я конкретно вот такой пример имел ввиду (\" просто так вставил):
<tag prop="Let's do it ==>"/><tag prop="More ' quote"/> =>
<tag prop="Let's do it ==&gt;"/><tag prop="More ' quote"/> =>
<tag prop="Let's do it ==&gt;"/&gt;&lt;tag prop="More ' quote"/> =>
--
Спасибо
Re[7]: Помогите с регулярным выражением
От: Roman Odaisky Украина  
Дата: 11.09.06 09:06
Оценка:
Здравствуйте, Vladimir D Belousov, Вы писали:

VDB>Чего-чего? Я конкретно вот такой пример имел ввиду (\" просто так вставил):

VDB>
<tag prop="Let's do it ==>"/><tag prop="More ' quote"/> =>
<tag prop="Let's do it ==&gt;"/><tag prop="More ' quote"/> =>
<tag prop="Let's do it ==&gt;"/&gt;&lt;tag prop="More ' quote"/> =>

Чего-чего? (c)

Из этого всего правильно только так: <tag prop="Let's do it ==&gt;" />
До последнего не верил в пирамиду Лебедева.
Re[8]: Помогите с регулярным выражением
От: Vladimir D Belousov Россия  
Дата: 11.09.06 09:08
Оценка:
Здравствуйте, Roman Odaisky, Вы писали:

RO>Здравствуйте, Vladimir D Belousov, Вы писали:


VDB>>Чего-чего? Я конкретно вот такой пример имел ввиду (\" просто так вставил):

VDB>>
RO><tag prop="Let's do it ==>"/><tag prop="More ' quote"/> =>
RO><tag prop="Let's do it ==&gt;"/><tag prop="More ' quote"/> =>
RO><tag prop="Let's do it ==&gt;"/&gt;&lt;tag prop="More ' quote"/> =>
RO>

RO>Чего-чего? (c)

RO>Из этого всего правильно только так: <tag prop="Let's do it ==&gt;" />


Вот и я про то же.
Но разве здесь нет знаков < или > внутри парных кавычек?
<tag prop="Let's do it ==&gt;"/><tag prop="More ' quote"/>
--
Спасибо
Re[9]: Помогите с регулярным выражением
От: Roman Odaisky Украина  
Дата: 11.09.06 09:56
Оценка:
Здравствуйте, Vladimir D Belousov, Вы писали:

VDB>>>
<tag prop="Let's do it ==>"/><tag prop="More ' quote"/> =>
<tag prop="Let's do it ==&gt;"/><tag prop="More ' quote"/> =>
<tag prop="Let's do it ==&gt;"/&gt;&lt;tag prop="More ' quote"/> =>


RO>>Из этого всего правильно только так: <tag prop="Let's do it ==&gt;" />


VDB>Вот и я про то же.

VDB>Но разве здесь нет знаков < или > внутри парных кавычек?
VDB><tag prop="Let's do it ==&gt;"/><tag prop="More ' quote"/>

Однозначно нет. Сначала XML/HTML/XHTML парсится на теги по «<»/«>», потом только все &xxx; заменяются на то, что они обозначают.
До последнего не верил в пирамиду Лебедева.
Re[10]: Помогите с регулярным выражением
От: Vladimir D Belousov Россия  
Дата: 11.09.06 10:05
Оценка:
Здравствуйте, Roman Odaisky, Вы писали:

RO>Здравствуйте, Vladimir D Belousov, Вы писали:


VDB>>>>
RO><tag prop="Let's do it ==>"/><tag prop="More ' quote"/> =>
RO><tag prop="Let's do it ==&gt;"/><tag prop="More ' quote"/> =>
RO><tag prop="Let's do it ==&gt;"/&gt;&lt;tag prop="More ' quote"/> =>
RO>


RO>>>Из этого всего правильно только так: <tag prop="Let's do it ==&gt;" />


VDB>>Вот и я про то же.

VDB>>Но разве здесь нет знаков < или > внутри парных кавычек?
VDB>><tag prop="Let's do it ==&gt;"/><tag prop="More ' quote"/>

RO>Однозначно нет. Сначала XML/HTML/XHTML парсится на теги по «<»/«>», потом только все &xxx; заменяются на то, что они обозначают.


А, в этом контексте — да, не спорю.
Просто в исходном посте шел разговор про простой текст.
--
Спасибо
Re[4]: Помогите с регулярным выражением
От: Константин Л. Франция  
Дата: 11.09.06 10:07
Оценка:
Здравствуйте, Smal, Вы писали:

S>Здравствуйте, Константин Л., Вы писали:


КЛ>>(<.*>)?


КЛ>>а затем заменяешь '<', '>' обратно

S>А если внутри кавычек есть \"? или <<>><>>>?

\" — не заменяем, <> недопустимые символы внутри значений тегов и аттрибутов. При правильном HTML должно сработать

S>Эта задача не решается при помощи регулярных выражений

S>(по крайней мере в общем случае).
Re[5]: Помогите с регулярным выражением
От: ламмму Украина http://itjob.kharkov.ua
Дата: 11.09.06 10:11
Оценка:
<> недопустимые символы внутри значений тегов и аттрибутов. При правильном HTML должно сработать

и тем не менее браузеры нормально кушают эту конструкцию, а мне нужно отпарсить около сотни документов, и как известно большая доля документов не придерживается никаких стандартов...
<b>bold text</b>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.