Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Компьютеры + Интернет » Вебмастеру » регулярные выражения

Ответить
Настройки темы
регулярные выражения

Аватара для Ginger

Рыжая


Сообщения: 1550
Благодарности: 19

Профиль | Сайт | Отправить PM | Цитировать


Помогите, пожалуйста, составить рег. выражение:
Вот пример кода, который не работает:
Код: Выделить весь код
$text = "some text with image <img src=”../user_img/093470394746/image.gif”> goes here for testing purposes";
preg_match('/user_img\/ ? ([0-9]{12})\/ ',$text,$result);

foreach( $result as $v)
echo "res - ".$v;
суть заключается в том, что нужно в данном тексте найти название директории, состоящие исключительно из цифр, и которое _всегда_ находиться после «user_img/».
Вернуть его в переменную.
Количество цифр всегда 12. Читать нужно либо 12 цифр подряд, либо до forward slash «/».

-------
ХР, 2000, NT - BSOD (синие экраны смерти) русский перевод


Отправлено: 17:51, 21-12-2004

 

Deadooshka


Сообщения: 2512
Благодарности: 689

Профиль | Отправить PM | Цитировать


функцией preg_match или preg_match_all

Отправлено: 01:10, 13-10-2009 | #51



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для Artem-Samsung

Ветеран


Сообщения: 823
Благодарности: 53

Профиль | Сайт | Отправить PM | Цитировать


Цитата Sham:
функцией preg_match или preg_match_all »
Есть строка.

Код: Выделить весь код
$data = "<td>USD</td><td>7,9</td><td>8,1</td>";


Искомое: 8,1 обозначаю его \d\,\d
Слева стоит: <td>USD</td><td>7,9</td><td>, где 7,9 тоже может быть динамическим, по этому обозначаю \d\,\d
Справа стоит: </td>

Выражение, которое описывает условие :

Код: Выделить весь код
$a = preg_match_all("/(?<=<td>USD<\/td><td>\d\,\d<\/td><td>)\d\,\d(?=<\/td>)/", $data, $matches);
На выходе (echo $a) получается:

Код: Выделить весь код
<td>USD</td><td>7,9</td><td>8,1</td>
совсем не 8,1

PHP код: Выделить весь код

$data "<td>USD</td><td>7,9</td><td>8,1</td>";

$a preg_match_all("/(?<=<td>USD<\/td><td>\d\,\d<\/td><td>)\d\,\d(?=<\/td>)/"$data$matches);
echo 
$data

Отметить стоит еще то, что в процессе вылазили ошибки типа:

Код: Выделить весь код
Warning: preg_match_all() [function.preg-match-all]: Compilation failed: lookbehind assertion is not fixed length at offset 39
когда пытался цифры описать так: \d*\d*. Как сделать что бы с * - работало?, а то даже на {1,3} матерится.

Это моя первая работа с регулярными выражениями, может я вообще не в ту степь говорю.
Если можете обьяснить, то буду очень благодарен или попробуйте выложить свой вариант, я возможно там ошибку свою найду или хотя бы буду знать, как оно выглядит.

Спасибо

-------
Мой блог Web Development


Отправлено: 20:36, 26-11-2009 | #52


Deadooshka


Сообщения: 2512
Благодарности: 689

Профиль | Отправить PM | Цитировать


http://docs.php.net/manual/ru/regexp.reference.php
Цитата мануал:
Утверждения касательно предшествующего текста начинаются с (?<= для положительных утверждений и (?<! для отрицающих. Например, (?<!foo)bar не найдёт вхождения "bar", которым не предшествует "foo". Сами утверждения 'назад' ограничены так, чтобы все подстроки, которым они соответствуют, имели фиксированную длину. Но, в случае, если используются несколько альтернатив, они не обязаны иметь одинаковую длину. Таким образом шаблон (?<=bullock|donkey) корректен, но (?<!dogs?|cats?) вызовет ошибку во время компиляции.
т.е. квантификаторы повторения не прокатят ибо длина будет произвольная, и вообще вы зашли в дебри, откуда дорога только на дурку...

PHP код: Выделить весь код

preg_match
(
    
'{\<td[^\>]*\>\s*USD\s*\<\/td\>\s*\<td[^\>]*\>\s*[\d\,]+\s*\<\/td\>\s*\<td[^\>]*\>\s*([\d\,]+)\s*\<\/td\>}i',
    
$data,
    
$matches
);

// понатыкал \s (возможных пробелов) и [^\>]* вероятных атрибутов у таблицы
// это делается, чтобы меньше регулярку исправлять в будущем...

echo $matches[1]; //тут искомое должно быть 

UPD
Если ищется только одно значение, то preg_match...
Это сообщение посчитали полезным следующие участники:

Отправлено: 21:18, 26-11-2009 | #53


Аватара для Artem-Samsung

Ветеран


Сообщения: 823
Благодарности: 53

Профиль | Сайт | Отправить PM | Цитировать


Забавно так даже) получилась двухмерный массив. Результат в echo $matches[1][0];

-------
Мой блог Web Development


Отправлено: 22:17, 26-11-2009 | #54


Deadooshka


Сообщения: 2512
Благодарности: 689

Профиль | Отправить PM | Цитировать


Цитата Artem-Samsung:
получилась двухмерный массив »
это если preg_match_all (она все совпадения ищет), а если preg_match, то одномерный.
Это сообщение посчитали полезным следующие участники:

Отправлено: 22:24, 26-11-2009 | #55


Аватара для Artem-Samsung

Ветеран


Сообщения: 823
Благодарности: 53

Профиль | Сайт | Отправить PM | Цитировать


Есть небольшой код:
Например:
Код: Выделить весь код
<p><div align="center"><img border="0" alt="" src="/uploads/news/banners/M-audio_Studiophile_BX5a_Deluxe-2.jpg" />
Нужно заменить
Код: Выделить весь код
/uploads/news/banners/M-audio_Studiophile_BX5a_Deluxe-2.jpg
на
Код: Выделить весь код
http://site.com/uploads/news/banners/M-audio_Studiophile_BX5a_Deluxe-2.jpg
Пока пытаюсь выцепить путь к файлу.

PHP код: Выделить весь код

preg_match ('{src=\"([.]+)\"}'$string$match); 


Возвращается пустой результат. Help

-------
Мой блог Web Development


Отправлено: 15:08, 08-07-2010 | #56


Deadooshka


Сообщения: 2512
Благодарности: 689

Профиль | Отправить PM | Цитировать


Цитата Artem-Samsung:
preg_match ('{src=\"([.]+)\"}', $string, $match); »
если нужно вытащить путь, то можно попробовать так
PHP код: Выделить весь код

preg_match ('{src\=\"([^\"\s]*\/)?[^\/\"\s]+\"}'$string$match);
echo 
$match[1]; 

шаблон получился общий, поэтому для лучшей "зацепки" лучше добавить возможные расширения файлов в src
Это сообщение посчитали полезным следующие участники:

Отправлено: 21:01, 08-07-2010 | #57


Аватара для Artem-Samsung

Ветеран


Сообщения: 823
Благодарности: 53

Профиль | Сайт | Отправить PM | Цитировать


Разобрался в этом, большое спасибо.
А вот теперь мне нужно разобраться с preg_replace

Вариант такой, и работает:

$pattern = "{(src\=\")([^\"\s]*\/[^\/\"\s]+\")}";
$replacement = "$1http://djone.com.ua$2";
echo preg_replace($pattern, $replacement, $banner['cont']);

Есть ли еще какой то, может более эстетический способ решения?

-------
Мой блог Web Development


Отправлено: 22:22, 08-07-2010 | #58


Deadooshka


Сообщения: 2512
Благодарности: 689

Профиль | Отправить PM | Цитировать


PHP код: Выделить весь код

echo preg_replace
(
    
'{(?<=src\=\")([^\"\s]*\/[^\/\"\s]+\.(?:png|jpe?g|bmp|gif))(?=\")}i',
    
'http://djone.com.ua${1}',
    
$banner['cont']
); 

1. уточняющие расширения картинок для ускорения, и src есть не только у img
2. одинарные кавычки лучше, ибо двойные парсятся PHP как строки.
Это сообщение посчитали полезным следующие участники:

Отправлено: 23:16, 08-07-2010 | #59


Аватара для Artem-Samsung

Ветеран


Сообщения: 823
Благодарности: 53

Профиль | Сайт | Отправить PM | Цитировать


Помогите составить регулярное выражение

Есть строковая переменная, которая в себе содрежит в частности такой текст:

Код: Выделить весь код
<li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-66" id="menu-item-66"><a href="http://premises.kiev.ua/m/pro-kompaniyu/">Про компанію</a>
<ul class="sub-menu">
<li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-72" id="menu-item-72"><a href="http://premises.kiev.ua/m/pro-kompaniyu/proekty/">Проекти</a></li>
<li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-71" id="menu-item-71"><a href="http://premises.kiev.ua/m/pro-kompaniyu/kolektyv/">Колектив</a></li>
<li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-73" id="menu-item-73"><a href="http://premises.kiev.ua/m/pro-kompaniyu/chomu-z-namy-vyhidno/">Чому з нами вигідно</a></li>
</ul>
</li>
Мне нужно в гиперссылку
<a href="http://premises.kiev.ua/m/pro-kompaniyu/">Про компанію</a>

добавить class="drops"

Я пытаюсь сделать это таким образом

PHP код: Выделить весь код

$pattern "/(<li\sclass=\"menu-item\s[a-zA-Z0-9\-\s]*\" \sid=\"[a-zA-Z0-9\-\s]*\"><a\s)/i";
$menu preg_replace($pattern"${1} class='drops'"$menu); 

но никак не получается

-------
Мой блог Web Development


Отправлено: 00:39, 21-03-2012 | #60



Компьютерный форум OSzone.net » Компьютеры + Интернет » Вебмастеру » регулярные выражения

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Java - Регулярные выражения Java ValVlaGen Программирование и базы данных 0 19-10-2009 08:06
Прочее - grep регулярные выражения dogidogi Общий по Linux 8 28-05-2009 22:54
Разное - PHP - регулярные выражения: HELP GoldenOrb Программирование и базы данных 10 08-09-2008 16:47
PHP - регулярные выражения: HELP GoldenOrb Вебмастеру 13 18-07-2008 16:05
Регулярные выражения est Хочу все знать 6 02-10-2002 14:17




 
Переход