Показать полную графическую версию : PHP - регулярные выражения: HELP
GoldenOrb
07-08-2004, 21:45
никак не могу разобраться с регулярными выражениями, помогите
нужно выцепить имя картинки в строке(ах):
<img src="somefile.gif" alt="">
<img src=somefile.gif alt="">
<img src = somefile.gif>
с помощью функции preg_match_all
<?php
$test = <<<TEST
some text <imG src=image.gif> another text
text continues <iMg src= "image.png" Alt=text>
txt < img src ='image.jpg' alt ="text sfds" sOme="other tags">
text again <img src=iMAGE.tiff alt=""> that's all, folks!
TEST;
// регэксп длинный, я его немножко разбил
$src_part = 'src\s*=\s*("[^"]*"|\'[^\']*\'|[^\s]+)';
$alt_part = '(\s+alt\s*=\s*("[^"]*"|\'[^\']*\'|[^\s]+))?';
preg_match_all('/<\s*img\s+'.$src_part.$alt_part.'(.*?)>/i', $test, $result);
echo '<pre>';
print_r($result);
echo '</pre>';
?>
Результат:Array
(
[0] => Array
(
[0] => <imG src=image.gif>
[1] => <iMg src= "image.png" Alt=text>
[2] => < img src ='image.jpg' alt ="text sfds" sOme="other tags">
[3] => <img src=iMAGE.tiff alt="">
)
[1] => Array
(
[0] => image.gif
[1] => "image.png"
[2] => 'image.jpg'
[3] => iMAGE.tiff
)
[2] => Array
(
[0] =>
[1] => Alt=text
[2] => alt ="text sfds"
[3] => alt=""
)
[3] => Array
(
[0] =>
[1] => text
[2] => "text sfds"
[3] => ""
)
[4] => Array
(
[0] =>
[1] =>
[2] => sOme="other tags"
[3] =>
)
)
Где здесь то, что тебе нужно и как убрать лишние кавычки, я думаю, понятно.
Важное замечание: после img обязательно должно быть src, а не какой-либо другой тэг. И alt, если он есть, дожен быть обязательно после src, иначе он не выцепится. Я когда-то давно делал на php парсер html (свой двигатель шаблонов делал), у него этих проблем не было бы, но он давно утерян :(
Prisoner
09-08-2004, 01:05
Тема перемещена сюда (http://forum.oszone.net/topic.cgi?forum=20&topic=1106)
Prisoner
09-08-2004, 01:05
Тема перемещена сюда (http://forum.oszone.net/topic.cgi?forum=20&topic=1107)
Delion Soulblade
06-09-2008, 22:06
Помогите пожалуйста с регулярным выражением-никак не получается написать нужное или хотя бы реально работающее.
Задача: выцеплять адреса вида любойвозможныйадрес.ru и не кушать при этом никакие адреса почтовых ящиков :sorry:
Уж как только не пытался - и через [^@], и через ретроспективную негативную проверку, и жёстким заданием - не получается или получается то, работы чего я не понимаю.
Исходник, понятно [a-zA-Z0-9]+\.[rR][uU]
обалдеваю я с людей: Delion Soulblade столько букв написал, а ничего конкретного не сказал. Может в этом и проблема, что не смог сформулировать чётких условий? Домены только второго уровня? Не русскоязычные? Из произвольного текста?
Delion Soulblade
07-09-2008, 20:48
Ей-богу, не знаю уж в чём проблема и посему прошу помощи.
В моём случае без разницы какого уровня. Не русскоязычные. Из любой части любого текста, фразы или слова.
И, главное, чтобы при этом не затрагивались адреса почтовых ящиков.
Delion Soulblade, может быть пусть затрагиваются? Потом пройтись по массиву найденных адресов поиском, да исключить все вхождения с собакой.
Delion Soulblade
07-09-2008, 22:16
Да вот нет...не будет никакого массива, фильтрацию нужно осуществлять "вживую".
Delion Soulblade, ещё раз повторяю: напиши чётко что должно извлекаться и откуда. В частности, как быть с длинными адресами - содержащими путь к файлу; просто имеющих дробь на конце и т.п. Их надо игнорировать или извлекать из них адрес верхнего домена?
Delion Soulblade
08-09-2008, 16:47
Не нужно "извлекать". Задача одновременно сложнее и легче.
Требуется регулярное выражение (без привязки к какому-либо языку программирования), описывающее упоминание любого возможного упомянутого где и в чём угодно адрес сайта в зоне .ru (не URL!)
Обязательное условие: отсутствие реакции на любые адреса электронных почт в той же зоне.
[a-zA-Z0-9]+\.[rR][uU] не подходит только из-за того, что "ловит" почтовые адреса. Прошу помочь дописать это регулярное выражение, чтобы оно игнорировало их.
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.