Помогите с регуляркой, найти слово

FFFFx029A
На сайте с 01.09.2007
Offline
142
815

Всем доброго времени суток)

Есть текст вида:

Вася сьел собаку, Вася ее долго варил, но этож васЯ, еслибы был не-вася то поджарил бы лучше..., Васялий млин..., будь как невасялий, эх, вася! Вася?

результат должен быть так:

Вася сьел собаку, Вася ее долго варил, но этож васЯ, еслибы был не-вася то поджарил бы лучше..., Васялий млин..., будь как невасялий, эх, вася! Вася?

---------------------------------

Нужно всех "васю" пометить болтом т.е <b>вася</b>, но запор в то что после имени может быть запятая или пробел или точка или знак вопроса или восклицательный знак, может быть добавка аля васяЛИЙ и перед именем тож самое может быть, а нужно отметить только "вася" (вася может писатся по разному, неплохобы регистронезависимыфй вариант)

Делаю так покамись:

$str= preg_replace("/(вася|Вася|васЯ|вАся|ваСя)/","<b>\\0</b>",$str);

но если находит слово Васялий то выделяет его тож((( Как найти и выделить имя "Вася"?

Ктонить шарит? хелп

http://www.youtube.com/watch?v=Gyl4E4EcPdc (http://www.youtube.com/watch?v=Gyl4E4EcPdc) - партнёрка от Мавроди и МММ))) http://miniwm.ru/soft.php?read=917 (http://miniwm.ru/soft.php?read=917) CMS MiniWM v2.8 - 49.99$
sashka_
На сайте с 27.01.2010
Offline
103
#1


$str= preg_replace("/\bвася\b/i","<b>\\0</b>",$str);

Вот так будет как надо ;-)

alexandr_nv

делал под шаблон который сверху был ) я думаю такого не будет чтоб снало шли левые буквы а потом ИМЯ =) так что и так бы пошло :)

Знаю PHP, JS, jQuery. Помощь для вашего сайта. (/ru/forum/840509).
alexandr_nv
На сайте с 23.04.2009
Offline
39
#2

$str= preg_replace("/(?<=\W|^)(вася)(?=\W|$)/i","<b>\\0</b>",$str);

Вот так.

alexandr_nv добавил 18.06.2010 в 01:04

sashka_:

$str = preg_replace("/вася\b/i","<b>\\0</b>",$str);

Да, такой вариант понятнее. Но нужно ещё вначале добавить \b:

$str = preg_replace("/\bвася\b/i","<b>\\0</b>",$str);
L
На сайте с 15.06.2010
Offline
2
#3

Ну и не забываем про локаль, например:


setlocale(LC_ALL, "russian","ru_RU.CP1251");

Чтобы регистронезависимый поиск работал :)

FFFFx029A
На сайте с 01.09.2007
Offline
142
#4
alexandr_nv:
$str= preg_replace("/(?<=\W|^)(вася)(?=\W|$)/i","<b>\\0</b>",$str);

Вот так.

alexandr_nv добавил 18.06.2010 в 01:04

Да, такой вариант понятнее. Но нужно ещё вначале добавить \b:
$str = preg_replace("/\bвася\b/i","<b>\\0</b>",$str);

Сделал так:

$str= preg_replace("/(?<=\W|^)(вася)(?=\W|$)/i","<b>\\0</b>",$str);

встретилось слово Вася - не выделило, в слове васялий выделело <b>вася</b>лий

А в этом варианте:

$str = preg_replace("/\bвася\b/i","<b>\\0</b>",$str);

Строка:

»васялий

вася вася,

- ваще ниче не выделило...

Что посоветуете?

строка для теста:

Вася сьел собаку, Вася ее долго варил, но этож васЯ, еслибы был не-вася то поджарил бы лучше..., Васялий млин..., будь как невасялий, эх, вася! Вася?

ваСя крутой вася)

Должно выйти так:

Вася сьел собаку, Вася ее долго варил, но этож васЯ, еслибы был не-вася то поджарил бы лучше..., Васялий млин..., будь как невасялий, эх, вася! Вася?

ваСя крутой вася)

alexandr_nv
На сайте с 23.04.2009
Offline
39
#5

FFFFx029A, странно, обе регулярки работают как надо, проверял.

Советом limper воспользовались?

sashka_
На сайте с 27.01.2010
Offline
103
#6

может это не регулярки виноваты ? :)

FFFFx029A
На сайте с 01.09.2007
Offline
142
#7
alexandr_nv:
FFFFx029A, странно, обе регулярки работают как надо, проверял.
Советом limper воспользовались?

Вот фак, да эт локаль оказалась... Спс всем!!! 🤪

FFFFx029A добавил 18.06.2010 в 21:17

Если сделать так:

$str= preg_replace("/(?<=\W|^)(вася)(?=\W|$)/i","<b>\\0</b>",$str);

то при нахождении слова "вася," - запитую тоже хавает и записует в <b></b> вместе с "вася", а если написать просто слово "вася" без пробелов и без ничего то ваще не выделяет((( Мож както подредактировать нужно?

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий