Что не так с этим регулярным выражением? - PullRequest
0 голосов
/ 27 августа 2010

Мне нужно следующее -

если у меня есть предложение

$str = "i like programming very much";

и я ищу слово

$word = "r";

Я ожидаю, что он вернет предложение

"Мне нравится * p *** r *** og *** r *** aming * * ve *** r *** y * много"

Я написал для него следующее регулярное выражение, но иногда оно не работает.

$str = preg_replace("/([^\s{".preg_quote($word)."}]*?)(".preg_quote($word).")([^\s{".preg_quote($word)."}]*)/siu","<span class='pice1'>$1</span><span class='pice2'>$2</span><span class='pice1'>$3</span>",$str);

Не могли бы вы сказать мне, что я написал неправильно?

Спасибо

UPDATE:

например, это не работает, когда

$str = "ameriabank"; and $word = "ab";

...

Ответы [ 5 ]

3 голосов
/ 27 августа 2010

Почему вы просто не используете str_replace ()? Я думаю, что это проще

$search = "ab";
$word = "ameriabank";
$newstr = "<span class=\"pice1\">".str_replace($search, $word, "</span><span class=\"pice3\">".$search."</span></span class=\"pice1>\")."</span>";
2 голосов
/ 27 августа 2010
$str = "i like programming very much";
$w = "r";
echo preg_replace("/($w)/", "<b>$1</b>", $str);

Вывод:

i like p<b>r</b>og<b>r</b>amming ve<b>r</b>y much

Ответ на комментарий: сделать это в два этапа.

$str = "i like programming very much ready tear";
$w = "r";
$str = preg_replace("/\\b((?:\\w+|\\b)$w(\\w+|\\b))\\b/", "<i>$1</i>", $str);
$str = preg_replace("/($w)/", "<b>$1</b>", $str);
echo $str;

вывод:

i like <i>p<b>r</b>og<b>r</b>amming</i> <i>ve<b>r</b>y</i> much <i><b>r</b>eady</i> <i>tea<b>r</b></i>
1 голос
/ 27 августа 2010

А как же так:

$str = "i like programming very much";
$word = "r";
$list = explode(' ',$str);
for($i=0; $i<count($list); $i++) {
    if(preg_match("/$word/", $list[$i])) {
        $list[$i] = '<i>'.preg_replace("/$word/siu", "<b>$word</b>", $list[$i]).'</i>';
    }
}
$str = implode(' ',$list);
echo $str,"\n";
1 голос
/ 27 августа 2010
0 голосов
/ 28 августа 2010
$str = "i like programming very much";
$word = "r";
function highlight($matches)
{
    global $word;
    return '<span class="pice1">'.str_replace($word,'<span class="pice2">'.$word.'</span>',$matches[0]).'</span>';
}
echo $str = preg_replace_callback("/([^\s]*?".preg_quote($word, '/')."[^\s]*)/siu", highlight, $str);

делать работу (и это работает с иностранными языками) ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...