Вопрос по php, regex – оберните <b>-tag вокруг первого слова строки с preg_replace</b>

4

Моя проблема в том, что это:

preg_replace('/(?<=\>)\b\w*\b|^\w*\b/', '<b>$&</b>', $string);

Не работает и я не знаю почему!

Это выводит:<b>$&</b> example если строкаan example, так что это неправильно. Так должно быть:<b>an</b> example

Я сгенерировал этот регулярный код сhttp://gskinner.com/RegExr/ где это работает.

Я знаю, что, очевидно,$& не делает правильную вещь. Но как я могу заставить это работать?

Можете ли вы дать мне совет?

Ваш Ответ

3   ответа
10

Попробуйте с этим вместо

preg_replace('/(?<=\>)\b\w*\b|^\w*\b/', '<b>$0</b>', $string);

$ 0 означает, что оно станет первым в вашем регулярном выражении, $ 1 - вторым и т. Д.

Вы также можете использовать обратные ссылки; \ 0 возвращает первое совпадение с того места, где вы находитесь, \ 1 возвращает второе сопоставление и т. Д.Больше информации

Вот это да. это просто. очень полезно. благодарю вас!! John Doe Smith
2

Вам нужно поставить номер после$ для ссылки на сгруппированную часть регулярного выражения. Здесь это будет первая группа, следовательно, 0. Рабочий пример здесь:http://codepad.org/4V7GWdja

<?php

$string = "an example";
$string = preg_replace('/(?<=\>)\b(\w*)\b|^\w*\b/', '<b>$0</b>', $string);
var_dump($string);

?>
1
$string = 'an example';
echo preg_replace('/^\b(.+?)\b/i', '<b>$1</b>', $string);

// <b>an</b> example

Похожие вопросы