Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум Регулярные Выражения

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Вытащить два значения
 
 автор: JIEXA   (27.08.2007 в 18:00)   письмо автору
 
 

Есть тест:

[youtube]http://www.youtube.com/watch?v=SQ0PnOLKnY4[/youtube]


нужно чтобы на выходе получилось SQ0PnOLKnY4 это то, что после http://www.youtube.com/watch?v=.

и есть код

[rutube]http://rutube.ru/tracks/132143.html?v=647c292274b19dce67a756b46a9f68dc[/rutube]


Нужно получить 647c292274b19dce67a756b46a9f68dc, это то что после http://rutube.ru/tracks/132143.html?v=

Я попробывал так:

    $txt = preg_replace('#\[youtube\]http://www.youtube.com/watch?v=(.+?)\[/youtube\]#si', '<object width="425" height="350"><param name="movie" value="http://www.youtube.com/v/\1"></param><param name="wmode" value="transparent"></param><embed src="http://www.youtube.com/v/\1" type="application/x-shockwave-flash" wmode="transparent" width="425" height="350"></embed></object>', $txt);
    $txt = preg_replace('#\[rutube\]http://rutube.ru/tracks/132143.html?v=([^\s\'\";:\+]*?)\[/rutube\]#si', '<object width="400" height="353"><param name="movie" value="http://video.rutube.ru/\1" /><PARAM name="wmode" value="window" /><PARAM name="allowFullScreen" value="true"></PARAM><EMBED src="http://video.rutube.ru/\1" type="application/x-shockwave-flash" wmode="window" width="400" height="353" allowFullScreen="true"/></OBJECT>', $txt);


Но не работает. Подскажите пожалуйста, как правильно и безопасно.

   
 
 автор: kasmanaft   (27.08.2007 в 19:11)   письмо автору
 
   для: JIEXA   (27.08.2007 в 18:00)
 

Нужно экранировать знаки вопросов в шаблоне
\[youtube\]http://www\.youtube\.com/watch\?v=(.+?)\[/youtube\]

И точки.

   
 
 автор: JIEXA   (27.08.2007 в 19:26)   письмо автору
 
   для: kasmanaft   (27.08.2007 в 19:11)
 

Я тут немножко посидел - поизучал ренг. выр. и у меня получилось вот так:
<?
    $txt 
preg_replace('#\[youtube\]http://www\.youtube\.com/watch\?v=([-a-z0-9]*?)\[/youtube\]#si''<object width="425" height="350"><param name="movie" value="http://www.youtube.com/v/\1"></param><param name="wmode" value="transparent"></param><embed src="http://www.youtube.com/v/\1" type="application/x-shockwave-flash" wmode="transparent" width="425" height="350"></embed></object>'$txt);
    
$txt preg_replace('#\[rutube\]http://rutube\.ru/tracks/132143\.html\?v=([a-zA-Z0-9]*?)\[/rutube\]#si''<object width="400" height="353"><param name="movie" value="http://video.rutube.ru/\1" /><PARAM name="wmode" value="window" /><PARAM name="allowFullScreen" value="true"></PARAM><EMBED src="http://video.rutube.ru/\1" type="application/x-shockwave-flash" wmode="window" width="400" height="353" allowFullScreen="true"/></OBJECT>'$txt);
?>

Это правильно? Я впринципе со всем разобрался, единственное непонял зачем в ([-a-z0-9]*?) нужно ставить *?, подскажите пожалуйста

   
 
 автор: SHAman   (27.08.2007 в 19:44)   письмо автору
 
   для: JIEXA   (27.08.2007 в 19:26)
 

Вопрос после * и + нужно ставить, чтобы они останавливались при первой возможности, а не при последней.

Строка: "parabellum"
Если искать /^(.*)a/
В $1 окажется "par"
А если искать /^(.*?)a/, то "p".

PS. Кстати, в вашем случае, наверное, все же, + будет более точен, чем *

   
 
 автор: Ralph   (27.08.2007 в 20:13)   письмо автору
 
   для: SHAman   (27.08.2007 в 19:44)
 

Кстати,спасибо тебе :-) Многократно встречал понятие "жадности",но не понимал,а на твоем примере сразу врубился ...

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования