Выдрать регами закоментированый контент.

botan

Новичок
Выдрать регами закоментированый контент.

Я читал все статьи на пхпклабе да и не только "по регам".
Чё-то даже научился писать.
Но ответ на один вопрос для себя в своё время так и не нашёл а счас вот понадобился.
Например, хочу выдрать всё что закоментировано на странице
т.е. расположено между тегами
"<!--" и "-->"
при этом между ними могут быть и символы <> и -- и т.д.
если бы эти "теги" были бы длинной в один символ(например < >) проблем бы не было:
preg_math_all(/<([^\>]*)>/,$html_content,$matches).
А как писать такие реги?
Ну например как выдрать содержимое страницы между "вася" и "петя".
Если я плохо читал, ткните в мануал плиз :)
 

Фанат

oncle terrible
Команда форума
просто так и писать - вася, петя.
вася из одного символа ничем принципиально не отличается от пети из 4-х
 

botan

Новичок
чуть подробнее расскажу в чём мой "затупон".
Я не понимаю как написать следующее
Рег имеет вид
Вася, потом всё_что_не_Петя, Петя.
вот как в этом случае пишется
всё_что_не_Петя?
PHP:
preg_match_all("/<!--([^(-->)]*)-->/",$html_content,$matches);
Вот так-вот что-то выдерается но не всё :(
 

Фанат

oncle terrible
Команда форума
зачем тебе (все, что не петя)?
просто выбирай (ВСЁ) до пети
 

Profic

just Profic (PHP5 BetaTeam)
/U в [m]reference.pcre.pattern.modifiers[/m] - в дополнение в словам Фаната
 

botan

Новичок
Я всё равно понять не могу :)
Как выбрать "всё" ?
и при чём тут U ?
может пример приведёте какой-нибудь ? :)
 

Фанат

oncle terrible
Команда форума
botan
"все" - это любой символ.
примеров в "статьи на пхпклабе да и не только "по регам" - море.
инджой.
 

botan

Новичок
.
:)
Спасибо :)

Но блин, всё равно не то :)
preg_match_all("/<!--(.*)-->/",$this->html,$matches);
не кажит.
Чё не так ?
Выдерается уже больше, чем в прошлый раз но всё равно - не все. :(

Например вот такие куски кода:

<!--
<table BORDER=0 WIDTH="100%" CELLSPACING=0 CELLPADDING=0>
<tr>
<td VALIGN=TOP align=center>
<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"
codebase="http://active.macromedia.com/flash4/cabs/swflash.cab#version=4,0,0,0"
id="startpage" width="361" height="142">
<param name="movie" value="Doloi.swf">
<param name="quality" value="high">
<param name="base" value="">
<param name="bgcolor" value="#ffffff">
<embed name="startpage" src="Doloi.swf" quality="high" base="" bgcolor="#ffffff"
width="361" height="142"
type="application/x-shockwave-flash"
pluginspage="http://www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash">
</embed>
</object>
</td></tr>
</table>
-->

не находятся.
 

vladax

Новичок
botan
зачем тут U ?
ведь можно сделать гораздо проще
/<!--(.+?)-->/s
 

botan

Новичок
Originally posted by vladax
botan
зачем тут U ?
ведь можно сделать гораздо проще
/<!--(.+?)-->/s
Так же как и мой,
такие здоровые куски закоментированого кода не вылавливает.
Гоню.
Вылавливает :)
s - спасло отца русской демократии :)
Спасибо.
 

vladax

Новичок
botan
ты хоть залезь в ман и разберись, что это обозначает, а то так и будешь на форум за регами бегать как в лес по грибы..
 

botan

Новичок
Меня спасло именно s
By default, the quantifiers are "greedy", that is, they match as much as possible (up to the maximum number of permitted times), without causing the rest of the pattern to fail. The classic example of where this gives problems is in trying to match comments in C programs. These appear between the sequences /* and */ and within the sequence, individual * and / characters may appear. An attempt to match C comments by applying the pattern /\*.*\*/ to the string /* first command */ not comment /* second comment */ fails, because it matches the entire string due to the greediness of the .* item.

However, if a quantifier is followed by a question mark, then it ceases to be greedy, and instead matches the minimum number of times possible, so the pattern /\*.*?\*/ does the right thing with the C comments. The meaning of the various quantifiers is not otherwise changed, just the preferred number of matches. Do not confuse this use of question mark with its use as a quantifier in its own right. Because it has two uses, it can sometimes appear doubled, as in \d??\d which matches one digit by preference, but can match two if that is the only way the rest of the pattern matches.
До этого я уже сам дошел :)

-~{}~ 27.12.04 13:34:

Originally posted by botan
я понял что я не понимал в регах.
это относилось к жадности :)
 

Фанат

oncle terrible
Команда форума
смшной топик.
ботан, который и с третьего раза не въехал - это сильно.

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

-~{}~ 27.12.04 13:36:

это относилось к жадности
s к жадности не имеет никакого отношения.
и это самое смешное
 

botan

Новичок
Originally posted by Фанат
смшной топик.
ботан, который и с третьего раза не въехал - это сильно.

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

-~{}~ 27.12.04 13:36:
s к жадности не имеет никакого отношения.
и это самое смешное
А вообще, моё непонимание быстрее устранила бы ссылка на жадность :)
А вот уважаемый vladax дав мне один рабочий пример - и направил меня по нужному пути
который и привёл меня к злачным местам :)
"?)" :)
Безусловно ответ на любой вопрос можно найти в мануалах. Тут спрашивают обычно что бы срезать путь :)
Просто про то что у них есть "жадность" и что это такое я не знал до сегодняшнего дня.

Ещё раз всем спасибо :)
 

SiMM

Новичок
Автор оригинала: botan
А вообще, моё непонимание быстрее устранила бы ссылка на жадность :)
[m]PCRE[/m] - только не говори, что ты об этой ссылке ничего не знал.
 
Сверху