Наглая регулярка
$text = "before text middle text after";
$text = ereg_replace("(.*)","was bold",$text);
echo $text;
?>
По ходу должно вывести
before was bold middle was bold after
А выводит
before was bold after
То есть он заменяет самые дальние. Что делать?
preg_replace ("/\[b\](.*)\[\/b\]/U","\\1",$text);
вот оно уже работает, но если убрать /U, то оно тоже не будет работать.
Так в чём вооще причина??? И что это такое /U
<?php
$text = "before text middle text after";
$text = ereg_replace("[а-яА-Яa-zA-Z0-9[:punct:]]{1,}","was bold",$text);
echo $text;
?>
где:
а-яА-Яa-zA-Z0-9 любая буква или цифра
[:punct:]-любой знак пунктцации
Предлагаю так:
<?php
$text = "before text middle text after";
$text = ereg_replace("[а-яА-Яa-zA-Z0-9[:punct:]]{1,}","was bold",$text);
echo $text;
?>
где:
а-яА-Яa-zA-Z0-9 любая буква или цифра
[:punct:]-любой знак пунктцации
Не поверишь, но наверху АНАЛОГИЧНЫЙ КОД, только более простой....
И ты тоже наляпал хрен знает сколько лишнего...
Если и я и они наляпали много лишнего, покажи как надо. Тем более что мне например понятнее мой вариант где всё понятно что мы выбираем для выражения.
Он не наляпал ничего лишнего.
У него работает уже все нормально.
Проблема была не в том что не выбирался любой символ, а в том что он захватывал всю область, а не определенную.
Ты не правильно понел в чем у него проблема.
После выполнения твоего скрипта, аналогичного тому что есть у афтора, возникает тот же трабл.
Действительно не совсем понимаю что надо было. Я так понял надо щаменить все * на was bolt
Все верно, и в примере ниже заменялась выделенная часть
before text middle text after
Кстати, только сейчас подумал. В твоем же примере отсутвуют символы <> по идее должно работать правильно. Извиняюсь. У меня нет пхп чтобы проверить. Так что простите за простые догадки.
Все верно, и в примере ниже заменялась выделенная часть
before text middle text after
Кстати, только сейчас подумал. В твоем же примере отсутвуют символы <> по идее должно работать правильно. Извиняюсь. У меня нет пхп чтобы проверить. Так что простите за простые догадки.
Вообще то оно работает, если описывать посимвольно, даже если и есть <> (простите что забыл это написать). Но все равно не ясно почему ерег как-то с краю проверяет.
(.*), то заменяется всё от первого до последнего , так как (.*) - любое количество любых символов и он найдя строку по такому шаблону её заменяет. А если писать {1,}, то он будет подискивать шаблон типа 1 любой символ, 2 любых символа, 3 любых символа и тд и тогда будет заменять наименьшими строками, что нам и надо.
На самом деле всё правильно Если мы пишем
(.*), то заменяется всё от первого до последнего , так как (.*)
Поиском когда научимся пользоваться. На днях обсуждали жадность квантификаторов.
(.*?) & relax.
На самом деле всё правильно Если мы пишем
(.*), то заменяется всё от первого до последнего , так как (.*) - любое количество любых символов и он найдя строку по такому шаблону её заменяет. А если писать {1,}, то он будет подискивать шаблон типа 1 любой символ, 2 любых символа, 3 любых символа и тд и тогда будет заменять наименьшими строками, что нам и надо.
Если открыть справочник, то там ясно сказано
{1,} равносильно *.
Если открыть справочник, то там ясно сказано
{1,} равносильно *.
Но на деле с * и {1,} по разному. Что - то както многое не ясно. У кого есть инфа по регулярным выражениям?
Но на деле с * и {1,} по разному. Что - то както многое не ясно. У кого есть инфа по регулярным выражениям?
Ничего не по разному. И я ошибся...
Вот на держи
Для удобства (и обратной совместимости) три наиболее распространённых квантификатора имеют односимвольные сокращения:
* эквивалентен {0,}
+ эквивалентен {1,}
? эквивалентен {0,1}
Ничего не по разному. И я ошибся...
Вот на держи
http://web.php.net.ua/manual/php4/pcre.pattern.syntax.html
ОК. Спасибо.