Помогите понять логику регуляра.

Tonn

Новичок
Помогите понять логику регуляра.

Помогите понять логику.

PHP:
 $text2  = "1лалалала2 1пыхало2 1лапых2 1лалалпыхлала2 1рыррырыры2";

  $text2 =  preg_replace("/1\w*(?=пых)\w*2/Ui","хых",$text2);

  echo $text2;
Выводит:
1лалалала2 хых хых хых 1рыррырыры2
Почему
$text2 = preg_replace("/1\w*(?!пых)\w*2/Ui","хых",$text2);
Выводит:
хых хых хых хых хых
?
 

Demiurg

Guest
а что тебя смущает ?
РВ ищет 1 за ним сколько угоднно букв, за ними еще сколько угодно буквав, перед которыми не стоит "пых", и все это должно оканчиваться двойкой.
 

Tonn

Новичок
Автор оригинала: Demiurg
а что тебя смущает ?
РВ ищет 1 за ним сколько угоднно букв, за ними еще сколько угодно буквав, перед которыми не стоит "пых", и все это должно оканчиваться двойкой.
А /U разве не лечит это?

-~{}~ 29.06.04 17:17:

Автор оригинала: Maxim Matyukhin
Tonn

начнем с другой стороны, что ты ожидал получить в обоих случаях ?
В первом случае я получаю то, чего и ожидаю. Меняю всё с "пых" на хых.
А во втором хочу поменять все без "пых" на "хых".
 

Demiurg

Guest
/U инвертирует жадность.
первый \w* не берет ничего, все достается второму, без \U все было бы наоборот кроме третего слова.
 

Tonn

Новичок
Автор оригинала: Demiurg
/U инвертирует жадность.
первый \w* не берет ничего, все достается второму, без \U все было бы наоборот кроме третего слова.
первый \w* берет что-то. :|
 

Demiurg

Guest
>первый \w* берет что-то.
только во втором слове.

-~{}~ 29.06.04 17:31:

> за ними еще сколько угодно буквав, перед которыми не стоит "пых"
о шибся, на самом деле "которые не начинаются с \"пых\""
 

Tonn

Новичок
гыыыы.
тогда не понимаю, почему не будет работать
$text2 = preg_replace("/1((?=пых)\w)*2/Ui","хых",$text2);

спасибо.


ладно. хватит с меня и этого на сегодня. :)

-~{}~ 29.06.04 18:04:

Все. Понял.
 
Сверху