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

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

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

 

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

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

тема: Объемная регулярка (две)
 
 автор: r2Ccube   (30.09.2011 в 16:59)   письмо автору
1.2 Кб
 
 

Здравствуйте.

Не силен в регурярках, поэтому прошу помощи у специалистов.

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

Поможете?

Информация по составлению регулярки находится в прикреплении, так как форум почему-то не дает добавить образец. Говорит что я спамер.

Образец написан с bb кодами этого сайта, так что кому не сложно, добавьте текст из прикрепления сообщением форума.

Спасибо.

  Ответить  
 
 автор: cheops   (30.09.2011 в 17:28)   письмо автору
 
   для: r2Ccube   (30.09.2011 в 16:59)
 

Вы же регулярное выражение уже полностью составили или конечный вариант не работает?

PS Форум нервно относится к некоторым последовательностям, если вы первый раз обращаетесь, сейчас все сообщения должны проходить нормально.

  Ответить  
 
 автор: f111   (30.09.2011 в 19:52)   письмо автору
 
   для: r2Ccube   (30.09.2011 в 16:59)
 

надеюсь я правильно понял

<?php
$pattern 
"~http://[a-z0-9-]+\.[a-z]+\?(?:a|b|p)=([0-9]{1,6})\|([0-9abcdef]{32})\|([\w,]+)\|([\wа-яё=&.@\[\]#\s]+)~i";
$replacement "шаб_№1: $1\nшаб_№2: $2\nшаб_№3: $3\nшаб_№4: $4";
echo 
preg_replace($pattern$replacement$string);
?>

регулярка получилась жуткая.

>После шаблона идет символ решетка, а за ним уже не важно что, но тоже хотелось бы забрать получается пятым вхождением.

хз о чём речь

  Ответить  
 
 автор: r2Ccube   (02.10.2011 в 16:11)   письмо автору
 
   для: f111   (30.09.2011 в 19:52)
 

Да, спасибо, почти оно.

location.hash после знака # (якорь ссылки) попадает в четвертое вхождение, а не должен. Как его убрать из № 4? Если я изменяю выражение оно перестает работать.

  Ответить  
 
 автор: f111   (02.10.2011 в 19:39)   письмо автору
 
   для: r2Ccube   (02.10.2011 в 16:11)
 

~http://[a-z0-9-]+\.[a-z]+\?(?:a|b|p)=([0-9]{1,6})\|([0-9abcdef]{32})\|([\w,]+)\|([\wа-яё=&.@\[\]\s]+)#~i

  Ответить  
 
 автор: r2Ccube   (02.10.2011 в 20:01)   письмо автору
 
   для: f111   (02.10.2011 в 19:39)
 

Я так пробовал, не работает.


<?php
$string 
'http://site.ru/?a=123456|645aa8b78966272294e90bd885996b88|90_,az|id_forum=6&mail=soft.ti_me@site.com&a[0]=1&a[1]=2&search=поисковая фраза#location.hash';
$pattern "~http://[a-z0-9-]+\.[a-z]+\?(?:a|b|p)=([0-9]{1,6})\|([0-9abcdef]{32})\|([\w,]+)\|([\wа-яё=&.@\[\]\s]+)#~i";
$replacement "шаб_№1: $1<br>шаб_№2: $2<br>шаб_№3: $3<br>шаб_№4: $4";
echo 
preg_replace($pattern$replacement$string);
?>

  Ответить  
 
 автор: f111   (02.10.2011 в 20:22)   письмо автору
 
   для: r2Ccube   (02.10.2011 в 20:01)
 

после site.ru вы добавили слэшь /, которого в примере не было (я про прикреплённый файл).

~http://[a-z0-9-]+\.[a-z]+/\?(?:a|b|p)=([0-9]{1,6})\|([0-9abcdef]{32})\|([\w,]+)\|([\wа-яё=&.@\[\]\s]+)~i
лучше использовать для preg_match/_all

а это РВ для preg_replace
~http://[a-z0-9-]+\.[a-z]+/\?(?:a|b|p)=([0-9]{1,6})\|([0-9abcdef]{32})\|([\w,]+)\|([\wа-яё=&.@\[\]\s]+)(?:[\w#.]+)~i

  Ответить  
 
 автор: r2Ccube   (02.10.2011 в 22:15)   письмо автору
 
   для: f111   (02.10.2011 в 20:22)
 

Спасибо большое, все хорошо работает.

  Ответить  
 
 автор: f111   (02.10.2011 в 22:20)   письмо автору
 
   для: r2Ccube   (02.10.2011 в 22:15)
 

пожалуйста

  Ответить  
Rambler's Top100
вверх

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