|
|
|
| Добрый день, в каким случаях нужно ставить модификатор 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, что без.. | |
|
|
|
|
|
|
|
для: 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" не несёт смысла в данном конкретном примере.
> И еще вопрос- регулярное выражение делает поиск сразу в строке или в подстроках?
Не понял вопроса. | |
|
|
|
|
|
|
|
для: Саня
(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"...
Спасибо, вроде как понятно теперь! | |
|
|
|