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

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

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

 

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

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

тема: Регулярное выражение для работы с тэгом <a
 
 автор: cia   (18.08.2006 в 08:40)   письмо автору
 
 

Подскажите, плз, регулярку, выбирающую все адреса по шаблону:
<a href='(adress)>, <a href="(adress)">, <img src=... alt='(adress)'>, <img src=... alt="(adress)">

   
 
 автор: eclipse   (18.08.2006 в 08:53)   письмо автору
 
   для: cia   (18.08.2006 в 08:40)
 


<?

$str 
"<a href='(adress)>";
$str2 "<a href=\"(adress)\">";

preg_match("|<a href=\'\(([\s\S]+)\)>|isU",$str,$out);
preg_match("|<a href=\"\(([\s\S]+)\)\">|isU",$str2,$out2);

$res $out[1];
$res2 $out2[1];

echo 
"$res $res2";


?>


etc

   
 
 автор: Геогрий   (18.08.2006 в 16:58)   письмо автору
 
   для: eclipse   (18.08.2006 в 08:53)
 

Я могу следующее предложить:

eregi_replace('(.*)\\[url=(http://){1}(.*)\\](.*)\\[/url](.*)' , '\\1<a href="\\2\\3" target="_blank">\\4</a>\\5', $msg);
eregi_replace('(.*)\\[url=([^http://].*)\\](.*)\\[/url](.*)' ,  '\\1<a href="http://\\2" target="_blank">\\3</a>\\4', $msg);

Я решил просто с обработкой сообщений и тэгов: Я сделал базовый класс в котором происходит замена тэгов и стандартные действия с сообщением. И сделал класс который наследует базовый. В порожденном классе я обьявил массив с поддерживаемыми тэгами:
Ключ элемента - это поддерживаемый тэг, а его значение - замена:

//Массив в порожденном классе. Если в начале ключа идет слово "eregi", то это рег. выражение. Это слово просто при обработке отбрасывается.
$this->tags = array( 'eregi(.*)\\[url=(http://){1}(.*)\\](.*)\\[/url](.*)' => '\\1<a href="\\2\\3" target="_blank">\\4</a>\\5',
'eregi(.*)\\[url=([^http://].*)\\](.*)\\[/url](.*)' => '\\1<a href="http://\\2" target="_blank">\\3</a>\\4',
'' => '<b>', '' => '</b>' );
//Базовый класс.
foreach($this->tags as $FrmTag => $ToTag)
{
  if(substr($FrmTag, 0, 5) == "eregi") $this->TxtHandler = eregi_replace( substr( $FrmTag, 5), $ToTag, $this->TxtHandler);
  else $this->TxtHandler = str_ireplace( $FrmTag, $ToTag, $this->TxtHandler);
}

P. S. Мне надо с помощю регулярных выражений узнавать: в строке только цыфры или есть еще и буквы? Помогите пожалуйста. Я просто пишу программу для отправки сообщений другим пользователям сайта, и я хочу чтобы при отправке сообщений можно было вводить не только имя получателя, но и его ID.

   
 
 автор: Геогрий   (18.08.2006 в 18:00)   письмо автору
 
   для: Геогрий   (18.08.2006 в 16:58)
 

Я нашел регулярное выражение выясняющее "в строке одни цыфры или есть еще буквы" в книге "PHP 5 на примерах": "|^[/d]*$|@", правда там оно было на диалекте Perl, но я перевел на диалект POSIX : "(^[0-9]+$)".

   
 
 автор: BAHO   (20.08.2006 в 14:51)   письмо автору
 
   для: Геогрий   (18.08.2006 в 18:00)
 

а зачем? POSIX неумолимо устаревает

   
 
 автор: cheops   (20.08.2006 в 18:35)   письмо автору
 
   для: BAHO   (20.08.2006 в 14:51)
 

Ммм... скажем более мягко, POSX-регулярные выражения будут исключены из PHP, сам стандарт POSIX от этого никуда не девается и устаревает.

   
 
 автор: BAHO   (20.08.2006 в 23:01)   письмо автору
 
   для: cheops   (20.08.2006 в 18:35)
 

аха! а зачем же их тогда удаляют из ядра PHP? оставили бы? я конечно понимаю, что, как вы сказали, диалекты красоты языку не придают, но всё же, кому то удобнее использовать одни реги, другим - другие...
тем более потерять POSIX-регам такого сильного сторонника как PHP - смерти подобно

   
 
 автор: cheops   (21.08.2006 в 13:02)   письмо автору
 
   для: BAHO   (20.08.2006 в 23:01)
 

POSIX - это не регулярные выражения, это стандарт переносимых операционных систем, к удовлетворению которого стремится не только любая UNIX-система, но и Windows. Потерять для POSIX PHP - это плюнуть и растереть. Из PHP POSIX-регулярные выражения, которые являются малой толикой стандарта, исключаются по той причине, что из PHP разработчики делают ортогональный язык и все дублирующие библиотеки стараются исключить. Perl-библиотеку исключить нельзя, поэтому исключают POSIX, однако это не значит, что больше в жизни вы с этими регулярными выражениями не столкнётесь - это стандарт для утилит, POSIX-выражения используются в MySQL. Perl-выражения используются как правило в языках программирования - этот диалект заточен под использование в языках программирования. POSIX - заточены под использование в операционных системах.

   
 
 автор: Okey   (03.09.2006 в 01:00)   письмо автору
 
   для: cia   (18.08.2006 в 08:40)
 

А если много ссылок, куда все кидается

   
Rambler's Top100
вверх

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