Войти

Показать полную графическую версию : 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

ivank
08-08-2004, 17:41
<?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]

Busla
07-09-2008, 14:12
обалдеваю я с людей: Delion Soulblade столько букв написал, а ничего конкретного не сказал. Может в этом и проблема, что не смог сформулировать чётких условий? Домены только второго уровня? Не русскоязычные? Из произвольного текста?

Delion Soulblade
07-09-2008, 20:48
Ей-богу, не знаю уж в чём проблема и посему прошу помощи.
В моём случае без разницы какого уровня. Не русскоязычные. Из любой части любого текста, фразы или слова.
И, главное, чтобы при этом не затрагивались адреса почтовых ящиков.

Coutty
07-09-2008, 21:06
Delion Soulblade, может быть пусть затрагиваются? Потом пройтись по массиву найденных адресов поиском, да исключить все вхождения с собакой.

Delion Soulblade
07-09-2008, 22:16
Да вот нет...не будет никакого массива, фильтрацию нужно осуществлять "вживую".

Busla
08-09-2008, 14:19
Delion Soulblade, ещё раз повторяю: напиши чётко что должно извлекаться и откуда. В частности, как быть с длинными адресами - содержащими путь к файлу; просто имеющих дробь на конце и т.п. Их надо игнорировать или извлекать из них адрес верхнего домена?

Delion Soulblade
08-09-2008, 16:47
Не нужно "извлекать". Задача одновременно сложнее и легче.
Требуется регулярное выражение (без привязки к какому-либо языку программирования), описывающее упоминание любого возможного упомянутого где и в чём угодно адрес сайта в зоне .ru (не URL!)
Обязательное условие: отсутствие реакции на любые адреса электронных почт в той же зоне.
[a-zA-Z0-9]+\.[rR][uU] не подходит только из-за того, что "ловит" почтовые адреса. Прошу помочь дописать это регулярное выражение, чтобы оно игнорировало их.




© OSzone.net 2001-2012