PHP Bolding Экземпляр переменной x в строке - PullRequest
1 голос
/ 29 июля 2009

В основном у меня есть переменная, которая содержит несколько абзацев текста, и у меня есть переменная, которую я хочу выделить жирным шрифтом внутри абзацев. (Оборачивая <strong></strong> теги вокруг него). Проблема в том, что я не хочу выделять все экземпляры слова жирным шрифтом, иначе я бы просто сделал str_replace (), я хочу иметь возможность обернуть первый, второй, четвертый, любой экземпляр этого текста в теги, на мое усмотрение.

Я довольно долго искал в Google, но трудно найти какие-либо результаты, связанные с этим, возможно, из-за моей формулировки ..

Ответы [ 3 ]

1 голос
/ 29 июля 2009

Я думаю, что preg_replace() может помочь вам. В следующем примере следует пропустить 2 экземпляра слова «foo» и выделить третий:

preg_replace(
    '/((?:.*?foo.*?){2})(foo)/', 
    '\1<strong>\2</strong>', 
    'The foo foo fox jumps over the foo dog.'
);

(Извините, я забыл два вопросительных знака, чтобы отключить жадность в моем первом сообщении. Я отредактировал их сейчас.)

0 голосов
/ 30 июля 2009

Так как вы сказали, что хотите иметь возможность определить, какие экземпляры должны быть выделены, и звучит так, что это будет произвольно, что-то вроде этого должно сработать:

<code>
// Define which instances of a word you want highlighted
$wordCountsToHighlight = array(1, 2, 4, 6);
// Split up the paragraph into an array of words
$wordsInParagraph = explode(' ', $paragraph);
// Initialize our count
$wordCount = 0;
// Find out the maximum count (because we can stop our loop after we find this one)
$maxCount = max($wordCountsToHighlight);
// Here's the word we're looking for
$wordToFind = 'example'
// Go through each word
foreach ($wordsInParagraph as $key => $word) {
   if ($word == $wordToFind) {
      // If we find the word, up our count. 
      $wordCount++;
      // If this count is one of the ones we want replaced, do it
      if (in_array($wordCount, $wordCountsToHighlight)) {
         $wordsInParagragh[$key] = '<strong>example</strong>';
      }
      // If this is equal to the maximum number of replacements, we are done
      if ($wordCount == $maxCount) {
         break;
      }
   }
}
// Put our paragraph back together
$newParagraph = implode(' ', $wordsInParagraph);
Это не красиво и, вероятно, не самое быстрое решение, но оно будет работать.
0 голосов
/ 29 июля 2009

Вы, вероятно, можете сослаться на ' Замена n-го экземпляра совпадения с регулярным выражением в Javascript ' и изменить его для работы в соответствии с вашими потребностями.

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