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

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

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

 

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

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

тема: Добавить тег span между двумя первыми словами в встроке
 
 автор: admiral   (17.02.2012 в 06:06)   письмо автору
 
 

Есть строка например -
Ваня кушал груши и смотрел телевизор

на выходе нужно
<span>Ваня кушал</span> груши и смотрел телевизор

  Ответить  
 
 автор: ladan   (17.02.2012 в 10:40)   письмо автору
 
   для: admiral   (17.02.2012 в 06:06)
 


<?
$a 
"Ваня кушал груши и смотрел телевизор";
echo 
preg_replace("/(ваня кушал)(.+)/iu","<span>\\1</span>\\2",$a); //u- нужно убрать, если кодировка не utf-8
?>

  Ответить  
 
 автор: Sfinks   (17.02.2012 в 11:23)   письмо автору
 
   для: admiral   (17.02.2012 в 06:06)
 

<?php
  $a 
"Ваня кушал груши и смотрел телевизор";
  echo 
preg_replace("#^([^\s]+\s+[^\s]+)#isu","<span>$1</span>",$a); //u- нужно убрать, если кодировка не utf-8
?>

  Ответить  
 
 автор: ladan   (17.02.2012 в 12:36)   письмо автору
 
   для: Sfinks   (17.02.2012 в 11:23)
 

можете пожалуйста объяснить, почему имеено так нужно делать? Из этого шаблона понял только '^'(в начале строки), а что это [^\s]? Любой символ кроме заэкранированного s?

  Ответить  
 
 автор: Sfinks   (17.02.2012 в 15:00)   письмо автору
 
   для: ladan   (17.02.2012 в 12:36)
 

Объясняю разницу между моим и вашим вариантами:
1. (очевидно) Если строка будет
Петя кушал груши и смотрел телевизор
то ничего не произойдет.

2. (чуть менее очевидно)
Ваня   кушал груши и смотрел телевизор
то тоже ничего не произойдет

3. (еще менее)
Вчера Ваня кушал груши и смотрел телевизор
у вас выдаст
Вчера <span>Ваня кушал</span> груши и смотрел телевизор
а нужно ПЕРВЫЕ слова.
Кроме того нужно 2 ЛЮБЫХ ПЕРВЫХ слова, а не ваня кушал

Теперь о моем РВ....
Сразу забыл, но еще проще его записать так:
#^(\S+\s+\S+)#su

и оно же по частям:
^ - начало строки
\s - любой пробельный символ
\S - любой НЕ пробельный символ
s - исходный текст может быть многострочным
u - utf8

  Ответить  
 
 автор: ladan   (17.02.2012 в 15:55)   письмо автору
 
   для: Sfinks   (17.02.2012 в 15:00)
 

Спасибо, понятно и доступно объясняете :) а в чем разница $1 и \\1?

  Ответить  
 
 автор: cheops   (17.02.2012 в 16:09)   письмо автору
 
   для: ladan   (17.02.2012 в 15:55)
 

>а в чем разница $1 и \\1?
Это одно и тоже, просто последовательности, начинающиеся с $ в строках с двойными кавычками воспринимаются как PHP-переменные, значения которых нужно подставить, \\ тоже бывает нужно экранировать, количество этих символов разнится от типа кавычек и операционной системы... В цивилизованных языках этих проблем нет, так как в регулярных выражениях просто не используются кавычки, а в PHP вы сами выбираете какой кактус вам больше нравится кусать :)

  Ответить  
 
 автор: ladan   (17.02.2012 в 16:21)   письмо автору
 
   для: cheops   (17.02.2012 в 16:09)
 

:) ясно

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

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