|
|
|
(PHP) echo preg_replace('/.*/','foo','foo');
|
|||
|---|---|---|---|
|
#18+
Почему может работать неправильно вот этот регэксп( сравнивал с перлом) ? Перл: $_='foo'; s/.*/foo/; print; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.01.2006, 15:12 |
|
||
|
(PHP) echo preg_replace('/.*/','foo','foo');
|
|||
|---|---|---|---|
|
#18+
Ничего не понятно. А что нужно было получить? ---------------------------------------- Артисты не приехали, приехали цыгане ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.01.2006, 15:25 |
|
||
|
(PHP) echo preg_replace('/.*/','foo','foo');
|
|||
|---|---|---|---|
|
#18+
[quot 4m@t!c]Ничего не понятно. А что нужно было получить? в случае перла получается просто foo, а пхп foofoo вопрос: почему? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.01.2006, 15:28 |
|
||
|
(PHP) echo preg_replace('/.*/','foo','foo');
|
|||
|---|---|---|---|
|
#18+
salxвопрос: почему?По качану. Телепаты в отпуске. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.01.2006, 15:51 |
|
||
|
(PHP) echo preg_replace('/.*/','foo','foo');
|
|||
|---|---|---|---|
|
#18+
IMHO Все дело в "жадности" алгоритма вычисления квантификатора '*'. Perl использует жадный метод, т.е. '.*' вычисляет всю строку, видимо PHP использует не столь жадный метод и вычиялет начало строки. В перле данное поведение задается '.*?' -- There Ain't No Such Thing As A Free Lunch ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.01.2006, 17:13 |
|
||
|
(PHP) echo preg_replace('/.*/','foo','foo');
|
|||
|---|---|---|---|
|
#18+
BlackStarвидимо PHP использует не столь жадный метод и вычиялет начало строки.Не бывает "не столь жадных методов" - либо жадный, либо нежадный - третьего не дано. А случай действительно интересный. PS: неужели нельзя было повторить то, что в теме, в вопросе? Сбили, блин, с понталыгу поначалу... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.01.2006, 17:19 |
|
||
|
(PHP) echo preg_replace('/.*/','foo','foo');
|
|||
|---|---|---|---|
|
#18+
Да уж. И еще интереснее Код: plaintext 1. 2. а PHP с кодом Код: plaintext 1. 2. 3. 8-( ) Чегой то я совсем перестал это понимать. -- There Ain't No Such Thing As A Free Lunch ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.01.2006, 17:47 |
|
||
|
(PHP) echo preg_replace('/.*/','foo','foo');
|
|||
|---|---|---|---|
|
#18+
Может есть какое то эксплейн ...? Код: plaintext Код: plaintext ------------------------------- www.free-lancer.ru ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.01.2006, 17:59 |
|
||
|
(PHP) echo preg_replace('/.*/','foo','foo');
|
|||
|---|---|---|---|
|
#18+
В мане нашел В случае, если шаблон начинается с .* либо .{0,}, и установлен модификатор PCRE_DOTALL (являющийся аналогом Perl-опции /s), который позволяет метасимволу "точка" соответствовать переводу строки, шаблон неявно заякоривается. Это происходит поскольку все последующие конструкции будут сопоставляться с каждой символьной позицией в обрабатываемом тексте, и, как следствие, начало строки - единственная позиция, дающая наиболее полное совпадение. PCRE рассматривает каждый такой шаблон, как если бы ему предшествовала последовательность \A. В случае, если известно, что данные не содержат переводов строк, а сам шаблон начинается на .*, рекомендуется использовать PCRE_DOTALL для оптимизации шаблона, либо использовать метасимвол '^' для указания явного заякоривания. Но все равно не понятно, почему появляется второй [foo]. ---------------------------------------- Артисты не приехали, приехали цыгане ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.01.2006, 18:45 |
|
||
|
(PHP) echo preg_replace('/.*/','foo','foo');
|
|||
|---|---|---|---|
|
#18+
Первый раз он захватывает всю строку "foo", второй раз он захватывает ничего , которое тоже попадает под шаблон .* Проверочный скрипт: Код: plaintext 1. 2. ------------ CMD: Console of Must Die ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.01.2006, 14:25 |
|
||
|
(PHP) echo preg_replace('/.*/','foo','foo');
|
|||
|---|---|---|---|
|
#18+
Второго раза быть вообще не должно, если только не выставлен модификатор /g. -- There Ain't No Such Thing As A Free Lunch ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.01.2006, 15:16 |
|
||
|
(PHP) echo preg_replace('/.*/','foo','foo');
|
|||
|---|---|---|---|
|
#18+
А Шогал ведь может быть прав: Код: plaintext 1. 2. 3. -- There Ain't No Such Thing As A Free Lunch /g тут ни причем ManualSearches subject for matches to pattern and replaces them with replacement. If limit is specified, then only limit matches will be replaced; if limit is omitted or is -1, then all matches are replaced. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.01.2006, 15:48 |
|
||
|
|

start [/forum/topic.php?fid=23&msg=33468199&tid=1476996]: |
0ms |
get settings: |
6ms |
get forum list: |
9ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
160ms |
get topic data: |
6ms |
get forum data: |
2ms |
get page messages: |
47ms |
get tp. blocked users: |
1ms |
| others: | 244ms |
| total: | 479ms |

| 0 / 0 |
