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

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

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

 

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

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

тема: в каких случаях стоит ставить модификатор s
 
 автор: ladan   (02.05.2012 в 19:43)   письмо автору
 
 

Добрый день, в каким случаях нужно ставить модификатор s? Читал, что он объединяет подстроки в одну строку, но для чего? Есть ли примеры с его использованием? И еще вопрос- регулярное выражение делает поиск сразу в строке или в подстроках?




<?

$a 
"Lorem Ipsum - это текст-, часто используемый в печати и вэб-дизайне. Lorem Ipsum является станда";

$b "Lorem Ipsum -<img src=''> это текст-, час<img src=''>то используемый в п<img src=''>ечати и вэб-диза<img src=''>йне. Lorem Ipsu<img src=''><img src=''>m является стандартной";


echo 
preg_replace("/(.{1,20}).+/i","$1",$a);
echo 
preg_replace("/<img[^>]+>/i","",$b);

?>


Эти примеры одинаково дают один результат, что с модификатором s, что без..

  Ответить  
 
 автор: Саня   (16.06.2012 в 12:37)   письмо автору
 
   для: ladan   (02.05.2012 в 19:43)
 

"s" ничего не объединяет. По умолчанию метасимвол "." (точка) обозначает все символы, кроме символа перевода строки. Модификатор "s" добавляет в "точку" перевод строки.

Если переписать ваш пример:
<?

$a 
"Lorem Ipsum - это
текст-, часто используемый
в печати и вэб-дизайне.
Lorem Ipsum является станда"


echo 
preg_replace("/(.{1,20}).+/i","$1",$a); 

То строка останется неизменной, так как в ней нечего вырезать :)
Все строки подходят под критерий .{1,20}, однако всё остальное не подходит под критерий .+ из-за символа перевода строки. С модификатором "s" перевод строки теряет свой сакральный смысл и становится рядовым символом, и регулярное выражение снова работает как задумывалось.

Что касается img, то негативный шаблон не зависит от перевода строки. Перевод строки не является символом ">"? Да. Продолжаем захватывать символы. Поэтому "s" не несёт смысла в данном конкретном примере.

> И еще вопрос- регулярное выражение делает поиск сразу в строке или в подстроках?
Не понял вопроса.

  Ответить  
 
 автор: ladan   (28.06.2012 в 23:57)   письмо автору
 
   для: Саня   (16.06.2012 в 12:37)
 

Ради интереса такой пример

$a = "Lorem Ipsum - это текст-, часто \r\n используемый в печати \r\n и вэб-дизайне. Lorem Ipsum является станда";  

echo preg_replace("#.+#i","1",$a); // 111
echo preg_replace("#.+#si","1",$a); // 1



Значит регулярка заменяет ".+" до первого "\r\n" и ищет и заменяет дальше до последующего "\r\n"...

Спасибо, вроде как понятно теперь!

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

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