【发布时间】:2019-10-21 23:55:42
【问题描述】:
我有一条短信:
Curabitur nec bibendum erat。 sed a scelerisque arcu, facilisis 莫里斯双比登。 Mauris sed sed sapien volutpat, volutpat risus in, bibendum odio。前庭 eget neque a lorem CURABITUR rhoncus。 Aenean mollis ipsum ut facilisis egestas。 Pellentesquefinibus sed 前eget interdum。 Nunc fringilla ante a egestas mattis。赛德 tincidunt libero a dapibus bibendum。 Morbi ac sapien 车辆, 调味品justo eget,curabitur nisl。 Cras rutrum molestie 直径, ac maximus mauris auctor quis。 Ut vel diam nunc。 Aliquam auctor, 麦格纳 发酵菌,orci libero consectetur magna,id scelerisque Tellus sem et orci.
在 PHP 中,我想用标签 <mark> 包裹“curabitur”这个词,就像 <mark>$1</mark> 使用不敏感的大小写一样。
以下代码有效:
return preg_replace("/(" . $needle . ")/mi", "<mark>$1</mark>", $haystack );
输出:
Curabitur nec bibendum erat。 sed a scelerisque arcu, facilisis 莫里斯双比登。 Mauris sed sed sapien volutpat, volutpat risus in, bibendum odio。 Vestibulum eget neque a lorem CURABITUR rhoncus。埃涅阿 mollis ipsum ut facilisis egestas。 Pellentesque finibus sed ante eget 中间体。 Nunc fringilla ante a egestas mattis。 Sed tincidunt libero a dapibus bibendum。 Morbi ac sapien vehicula, condimentum justo eget, curabitur nisl。 Cras rutrum molestie diam, ac maximus mauris auctor 测验。 Ut vel diam nunc。 Aliquam auctor, magna ac finibus infantum, orci libero consectetur magna, id scelerisque tellus sem et orci。
但是如果你有这个文本:
[Curabitur] nec bibendum erat。 sed a scelerisque arcu, facilisis 莫里斯双比登。 Mauris sed sed sapien volutpat, volutpat risus in, bibendum odio。前庭 eget neque a lorem [CURABITUR] rhoncus。埃涅阿 mollis ipsum ut facilisis egestas。 Pellentesque finibus sed ante eget 中间体。 Nunc fringilla ante a egestas mattis。 Sed tincidunt libero a dapibus bibendum。 Morbi ac sapien vehicula, condimentum justo eget, [curabitur] 尼斯尔。 Cras rutrum molestie diam, ac maximus mauris auctor 测验。 Ut vel diam nunc。 Aliquam auctor, magna ac finibus infantum, orci libero consectetur magna, id scelerisque tellus sem et orci。
和$needle = [curabitur] 你应该使用preg_quote() 转义字符[,]
但以下操作不起作用:
return preg_replace("/(" . preg_quote( $needle ) . ")/mi", "<mark>$1</mark>", $haystack );
因为$1被preg_quote()修改了。
我该如何解决这个问题?
【问题讨论】:
-
你说的
$1被preg_quote()修改是什么意思?它被修改,以便正则表达式引擎可以将其解析为文字文本。您没有任何问题需要解决。
标签: php regex preg-replace