【问题标题】:Wrap tags around certain words将标签包裹在某些单词周围
【发布时间】:2013-09-15 07:13:38
【问题描述】:

我有一个单词数组,像这样:

array("the", "over", "hen");

我也有这样的字符串:

"The quick brown fox jumps over the lazy hen"

我想在数组中所有出现的单词周围加上一个标签 (strong),但要保持大小写正确。

例如,使用前面的字符串,它会结束

<strong>The</strong> quick brown fox jumps <strong>over</strong the lazy <strong>hen</strong>

但是,如果我有这句话:

"Hen #2 and ThE oveR reactive cow"

看起来像这样:

<strong>Hen</strong> #2 and <strong>ThE</strong> <strong>oveR</strong> reactive cow

我猜答案会使用正则表达式,但我不太擅长...

【问题讨论】:

  • 您是否尝试在比较过程中仅转换为小写,然后使用原始标签替换/包围您的标签?
  • @Fluffeh 你是什么意思?你能举一个我怎么做的例子吗?

标签: php regex tags


【解决方案1】:

尝试以下操作:

$string = 'Then quick brown fox jumps over the lazy hen';
$keys = array('the', 'over', 'hen');

$patterns = array();
foreach($keys as $key)
    $patterns[] = '/\b('.$key.')\b/i';

echo preg_replace($patterns, '<strong>$0</strong>', $string);

【讨论】:

  • 如果我错过了什么,请告诉我修复。
【解决方案2】:

我认为这应该可行,试一试:)

$replaceWords=array("the", "over", "hen");

$string="The quick brown fox jumps over the lazy hen";
$string_words=explode(" ", , $string);

foreach $string_words as $i=>$word {
    if (FALSE===array_search(strtolower($word),$replaceWords))
        continue;

    $string_words[i]="<strong>".$strin_words[i]."</strong>";
}
$new_string=implode(" ",$string_words);
echo $new_string;

【讨论】:

  • 不——所有被替换的单词都是小写的
  • 嗯,好的,现在我得到你想要的!
【解决方案3】:
<?php

$keys = array("the", "over", "hen");

$strings[] = array(
    "The quick brown fox jumps over the lazy hen",
    "Hen #2 and ThE oveR reactive cow. The The. Bus"
);

foreach ($keys as $key)
{
    $cKeys[] = ucfirst($key);
}

for ($i = 0; $i < count($strings); $i++)
{
    foreach ($keys as $key)
    {
        $strings[$i] = preg_replace("/$key/", '<b>$0</b>', $strings[$i]);
    }
    foreach ($cKeys as $key)
    {
        $strings[$i] = preg_replace("/(^|\. )($key)/", '$1<b>$2</b>', $strings[$i]);
    }
}

var_dump($strings);

【讨论】:

  • 不——不改变第一个'The'
  • 修复了加粗任何首字母大写并出现在字符串开头或句子之后的单词。我想我可能误解了你的问题。
猜你喜欢
  • 2019-01-28
  • 2011-07-06
  • 1970-01-01
  • 1970-01-01
  • 2011-12-26
  • 2012-11-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多