|
|
|
|
|
для: isset
(19.08.2005 в 23:36)
| | Не знаю, можно ли здесь оставлять такие сообщения...
Просто хочется сказать огромное спасибо за эту ветку и вообще за замечательный форум! Все, что мне нужно для PHP я нахожу именно у вас! Спасибо! | |
|
|
|
|
|
|
|
для: cheops
(19.08.2005 в 23:22)
| | а то я задумался чем .* плох :)
А, ну тогда можно переделать вот так:
echo preg_replace("/\(.*\)/U","",$str);
|
| |
|
|
|
|
|
|
|
для: isset
(19.08.2005 в 23:15)
| | Кошмар, теперь понятно почему я это не помню :))) наврное сразу выкинул из головы в силу сложности. Предпочитаю управлять жадностью при помощи Perl-модификатор U - это соответствующий абстрактный уровень. Помоему не совсем правильно с точки зрения интерфейса перегружать и так насыщенный знак вопроса управлением жадностью... хотя чёрт его знает, если нужно половину регулярного выражения сделать жадной, а другую наоборот, может это и выход... но знак вопроса помоему не совсем подходящий для этого символ и здорово запутывает. | |
|
|
|
|
|
|
|
для: cheops
(19.08.2005 в 23:09)
| | Из мануала:
Однако, если сразу же после квантификатора идет вопросительный знак, он перестает быть жадным и соответствует минимально допустимому количеству раз. Таким образом, шаблон /\*.*?\*/ корректно находит все комментарии языка Си. Использование символа '?' после квантификатора влияет исключительно на его жадность, и не затрагивает никакие другие свойства. Не следует путать использование символа '?' как, собственно, квантификатора (ноль либо одно соответствие) и как ограничителя жадности. Также в следствие его двойственной функциональности может использоваться следующая запись: \d??\d, которая в первую очередь соответствует одной цифре, но также может соответствовать и двум цифрам, если это необходимо для соответствия остальных частей шаблона.
|
| |
|
|
|
|
|
|
|
для: isset
(19.08.2005 в 22:49)
| | Ну так не совсем корректно сравнивать :))), ведь первое выражение можно исправить на
<?php
$str = 'пример ( текст ) убирания () скобок';
echo preg_replace("/\([^\)]*\)/","",$str);
?>
|
| |
|
|
|
|
|
|
|
для: isset
(19.08.2005 в 22:35)
| | >Для этого и стоит "?".
Хитро... чего-то сразу не врубаюсь - больно закручено получается два квантификатора подряд... | |
|
|
|
|
|
|
|
для: isset
(19.08.2005 в 22:35)
| | Кстати,
<?php
$str = 'пример ( текст ) убирания () скобок';
echo preg_replace("/\([^\)]+\)/","",$str);
echo "<br>";
echo preg_replace("/\(.*?\)/","",$str);
?>
|
Результат:
пример убирания () скобок
пример убирания скобок
|
| |
|
|
|
|
|
|
|
для: cheops
(19.08.2005 в 22:24)
| | Для этого и стоит "?".
preg_replace("/\([^\)]+\)/","",$str);
аналогичен
preg_replace("/\(.*?\)/","",$str); | |
|
|
|
|
|
|
|
для: isset
(19.08.2005 в 22:18)
| | Есть, большой соблазн применить .* или .+ в предположении что регулярные выражения в "text ( text ) text ( text ) text " найдут две пары скобок, но будет найдена только одна пара первая открывающая скобка и последняя закрывающая - так как по умолчанию регулярные выражения действуют в "жадном" режиме, чтобы минимизировать расчёты. Поиск начинатеся с конца строки и как только буедет найдено соответствие (а ) и ( удовлетворяют . которая равна любому символу), поиск прекращается. | |
|
|
|
|
|
|
|
для: cheops
(19.08.2005 в 22:09)
| | Почему? Есть примеры где .* работает не верно? | |
|
|
|
|