Заголовки жирной строки RegEx требуется помощь - PullRequest
2 голосов
/ 28 июня 2010

Я пытаюсь добавить жирный / сильный тег к заголовкам строк следующей строки / текстового блока:

Определение длины: размеры выше показать, что центр к центру длина может быть достигнута Длина соединительной тяги показана для мужской сферический стержень заканчивается.

Материал: алюминий.

Специальные предложения: специальные предложения доступны на любой объем.

Стандарты: MCP предлагает

Но я не могу заставить регулярное выражение включать несколько слов. Вот мой результат:

Длина Определение : размеры выше показать, что центр к центру длина может быть достигнута Длина соединительной тяги показана для мужской сферический стержень заканчивается.

Материал : алюминий.

Специальные предложения : специальные предложения доступны на любой объем.

Стандарты : MCP предлагает

Обратите внимание, что слово «Длина» в «Определение длины» не выделено жирным шрифтом. Это должно быть включено. Может кто-нибудь дать мне быструю руку?

Мой код:

$str = preg_replace_callback("/([^\s]+:)/i", 'makeStrong', $str);

function makeStrong($matches) {
    return "<strong>" . $matches[0] . "</strong>"; 
}

Ответы [ 3 ]

0 голосов
/ 28 июня 2010

Ваш [^\s] класс символов соответствует всему, что является , а не пробелами - что, очевидно, означает, что он не будет совпадать между словами, между которыми есть пробел.Попробуйте вместо этого:

$str = preg_replace_callback("/^([\w\s]+?:)/i", 'makeStrong', $str);
0 голосов
/ 28 июня 2010

Что по этому поводу:

$str = preg_replace_callback("/([ \w]+:)/", 'makeStrong', $str);

Если шаблон начинается с ^, он будет соответствовать только тому, что найдено в начале всей строки (для меня ваш вопрос звучал так, будто вы хотели обработать многострочную строку за один проход).

Если \s используется вместе с \ w, он также будет соответствовать разрывам строк и включать их в <strong />, как вы, вероятно, заметили.

0 голосов
/ 28 июня 2010

Попробуйте это:

<?
$str = "
Length Determination: the dimensions above show what center-to-center length can be achieved by the connecting linkage length shown for male spherical rod ends.
Material: aluminum.
Specials: specials are available at any volume.
Standards: MCP offers
";

$str = preg_replace_callback("/^([\w ]+:)/mi", 'makeStrong', $str);

function makeStrong($matches) {
    return "<strong>" . $matches[0] . "</strong>"; 
}

print $str;
?>

Ваш метод дает сбой, потому что [^\s] соответствует "не пробел" - это означает, что он не будет совпадать с пробелами между словами.

РЕДАКТИРОВАТЬ Исправлено

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