【问题标题】:regex string substitution upper and lower case正则表达式字符串替换大小写
【发布时间】:2016-01-04 13:21:37
【问题描述】:

给定以下简单函数(对于 PHP 页面),我试图匹配一个长文本字符串中出现的所有单词 $marker。我需要强调它的出现。 该功能有效,但存在两个问题:

1) 无法匹配出现的$marker 大写

2) 它还匹配部分出现:如果 $marker 是“art”,则该函数也匹配“artistic”和“cart”。

我该如何纠正这两个不便?

function highlightWords($string, $marker){
$string = str_replace($marker, "<span class='highlight success'>".$marker."</span>", $string);
return $string;
}

【问题讨论】:

标签: php regex string match uppercase


【解决方案1】:

要解决这两个问题,您可以将preg_replace() 与正则表达式一起使用。只需添加i flag 进行不区分大小写的搜索,并在您的搜索词周围添加\b word boundaries,这样它就不能成为另一个词的一部分,例如

function highlightWords($string, $marker){
    $string = preg_replace("/(\b" . preg_quote($marker, "/") . "\b)/i", "<span class='highlight success'>$1</span>", $string);
    return $string;
}

【讨论】:

  • 这个解决方案匹配大小写出现,但它似乎只返回小写字符串,转换原来的大写。
  • @Alex 是的,我忘了改变它。我用$1 更改了替换参数中的变量,这是第一个捕获组,这里是:(\b" . preg_quote($marker, "/") . "\b)。所以再试一次,它应该是你想要的。
  • 太棒了。它确实有效!我不知道使用组 ($1)。
猜你喜欢
  • 2016-03-28
  • 2018-07-13
  • 2018-04-07
  • 2017-02-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多