С помощью PHP найти фрагмент и поместить в теги

12
S
На сайте с 27.02.2007
Offline
60
1045

Нужно найти заданный фрагмент текста и поместить его в заданные теги.

К примеру, есть текст: "Нужно найти заданный фрагмент". Искомый фрагмент "Задан". Теги <b> и </b>. Есть варианты:

<?php

$text="Нужно найти заданный фрагмент";

$search="Задан";

$result1=eregi_replace($search, "<b>\\0</b>",$text);

$result2=preg_replace("/".$search."/i", "<b>\\0</b>", $text);

?>

Результат в обоих случаях: "Нужно найти <b>задан</b>ный фрагмент".

А как лучше сделать, чтоб выделялось слово целиком? То есть, чтоб получалось так: "Нужно найти <b>заданный</b> фрагмент"? С учетом того, что слово может заканчиваться не только пробелом, но и знаком припинания, переносом строки и прочим.

Кто подскажет изящное решение?

Создание сайтов, документация... (http://site3k.net/), сайт нашей дизайн-студии (http://website-it.ru/)
padre
На сайте с 25.02.2007
Offline
118
#1

А вы попробуйте тут в соседней темке ;)

Ш
На сайте с 07.09.2009
Offline
0
#2

$result2=preg_replace("/".$search.".*\s/i", "<b>\\0</b>", $text);

S
На сайте с 27.02.2007
Offline
60
#3
Шелдон:
$result2=preg_replace("/".$search.".*\s/i", "<b>\\0</b>", $text);

этот вариант ищет до пробела (при чем, только в конце). А слово-то может заканчиваться точкой, или запятой. Вот, что получится:

<?php

$text="Нужно, найти, заданный, фрагмент";

$search="дан";

$result2=preg_replace("/".$search.".*\s/i", "<b>\\0</b>", $text);

?>

Результат в обоих случаях: "Нужно, найти, за<b>данный,</b> фрагмент".

То же не совсем то, что нужно :(

T.R.O.N
На сайте с 18.05.2004
Offline
314
#4

Supervisork, а откуда такое огромное желание все воткнуть в регулярки? почему не сделать все по очереди:

1. разбиваем строку по словам (по всем разделителям.,- и т.д.)

2. Ищим вхождение в каждом слове.

3. Если нашли вхождение, делаем замену - слово на <b>слово</b> в исходной строке

От воздержания пока никто не умер. Хотя никто и не родился! Prototype.js был написан теми, кто не знает JavaScript, для тех, кто не знает JavaScript (Richard Cornford)
dvaes
На сайте с 03.09.2007
Offline
65
#5

preg_replace("'\b(\w*)?".$search."(\w*)?\b'i", "<b>\\0</b>", $text);

[Удален]
#6
S
На сайте с 27.02.2007
Offline
60
#7

Все подсказанные варианты никуда не годятся. В лучшем случае, они ищут по пробел. А как же знаки припинания? Вот, что использую я сейчас:

"/[^\.,\?:!'\s\x34\x93]*".$highlight."[^\.,\?:!'\s\x34\x93]*/i"

но реально, там нужно бы еще пол миллиона символов указать, которые не входят в слово. Например, знак процента, решетку и т. д. Есть ли более лаконичный вариант?

[Удален]
#8

Supervisork, знаков припинания всего то штук 20, перечислите их да и все ...

S
На сайте с 27.02.2007
Offline
60
#9

то есть, только прямым перечислением?

[Удален]
#10

ну вы можете перечислить русские и ингл буквы, вы же в любом случае знаете какие у вас будут ...

<?php

$text="Нужно найти заданный фрагмент";

$search="Дан";

$result2=preg_replace("#[а-яa-z\-]*".preg_quote($search)."[а-яa-z\-]*#ui", "<b>\\0</b>", $text);

?>

нечто такое да и все)

12

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