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

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

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

 

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

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

тема: Возвращаемое значение preg_replace
 
 автор: Zilog   (30.09.2012 в 01:26)   письмо автору
 
 

есть:
$newstr= preg_replace("!\|(.*?)(\|+?|$)!si",'<a href="'.$url.'">\\1</a>',$str);

ищем в тексте |выделенный кусок|, и меняем его на ссылку. Если символа вертикальной черты не встречается, строка соответственно не меняется.
А можно ли сделать так, что бы она бралась целиком?

  Ответить  
 
 автор: cheops   (30.09.2012 в 08:08)   письмо автору
 
   для: Zilog   (30.09.2012 в 01:26)
 

Пока не очень понятно, можно пример текста в $str или описание на примере, что сейчас и что хочется получить?

  Ответить  
 
 автор: Zilog   (30.09.2012 в 21:08)   письмо автору
 
   для: cheops   (30.09.2012 в 08:08)
 

пример: Пока не очень понятно, |можно пример текста в $str| или описание на примере

выделенная часть находится между '|' или от '|' и до конца строки. А вдруг '|' не встречается? — вот в чём вопрос. Можно ли настроить регулярку так, что бы в этом случае вся строка возвращалась.

  Ответить  
 
 автор: Sfinks   (30.09.2012 в 22:04)   письмо автору
 
   для: Zilog   (30.09.2012 в 21:08)
 

<?php
  $s1 
'часть1';
  
$s2 'часть1|часть2';
  
$s3 'часть1|часть2|часть3';

  
$pattern '#^.*?(\|(.*?)(\|[^\|]*?$|$))#';
  echo 
preg_replace($pattern,"$2$4",$s1).'<br>';  // часть1
  
echo preg_replace($pattern,"$2$4",$s2).'<br>';  // часть2
  
echo preg_replace($pattern,"$2$4",$s3).'<br>';  // часть2

  Ответить  
 
 автор: Zilog   (01.10.2012 в 00:11)   письмо автору
 
   для: Sfinks   (30.09.2012 в 22:04)
 

спаисбо, друг!
Теперь осталось расшифровать это заклинание :)

upd. Только оно делает на то, что нужно. Поясню на след. примере:

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


после обработки на выходе должна быть строка, где выделенный фрагмент заключен в теги <a></a>, то бишь становится ссылкой. Ту регулярку, что я привёл в первом посте - с этой задачей справляется, за исключением того, что если бы в исходной строке отсутствовали '|'.

  Ответить  
 
 автор: Sfinks   (01.10.2012 в 11:21)   письмо автору
 
   для: Zilog   (01.10.2012 в 00:11)
 

Сам не ожидал, но получилось! (Впервые удалось разобраться с условными шаблонами =)))
<?php
  $s1 
'Теоремы';
  
$s2 'Теорема |Пифагора';
  
$s3 'Доказательство |теоремы| Пифагора';

  
$pattern '#((^.*?)\|)?(?(1)(([^\|]*)\|?)|(^.*?$))#';
  echo 
preg_replace($pattern,"$2<a href=\"#\">$4$5</a>",$s1).'<br>';  // <a href="#">Теоремы</a>
  
echo preg_replace($pattern,"$2<a href=\"#\">$4$5</a>",$s2).'<br>';  // Теорема <a href="#">Пифагора</a>
  
echo preg_replace($pattern,"$2<a href=\"#\">$4$5</a>",$s3).'<br>';  // Доказательство <a href="#">теоремы</a> Пифагора

Разбирайтесь:
PCRE в Википедии
Еще очень полезная статья

  Ответить  
 
 автор: Zilog   (01.10.2012 в 12:43)   письмо автору
 
   для: Sfinks   (01.10.2012 в 11:21)
 

>Сам не ожидал, но получилось! (Впервые удалось разобраться с условными шаблонами =)))[code]<?php

мда, я такое пока осилить не в состоянии :)
большущее спасибо, будем изучать.

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

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