$string='Stack overflow in <font color="yellow"> "yellow"</font> font';
$words='"yellow"'
$string=preg_replace('/'.$words.'/i',
"<font style=\"background-color:blue;\">$0</font>",
$string);字符串“string”是来自不同函数的参数。preg_replace也会在字体标签中找到“黄色”。如何在使用preg-replace时避免字体标签?
编辑-所需的输出(引入换行符只是为了便于阅读)
Stack overflow in <font backgroundcolor="yellow">
<font style="background-color:yellow">"yellow"</font></font> font发布于 2012-03-09 13:45:32
我认为你正在寻找的是(作为一行程序,因为我认为在这种情况下它实际上有助于可读性):
$string = preg_replace('/backgroundcolor="yellow"/i',
'style="background-color:yellow;"',
'Stack overflow in <font backgroundcolor="yellow"> "yellow"</font> font');
echo $string;..。这将输出"Stack overflow in“黄色”字体“
相反,如果你的意思是你想替换“黄色”的另一个实例,那么这就是你想要的:
$string = preg_replace('/"yellow"</i',
'style="background-color:yellow;"<',
'Stack overflow in <font backgroundcolor="yellow"> "yellow"</font> font');
echo $string;..。这将产生输出"Stack overflow in background-color:Stack;“font”
基本上,您只需添加足够的额外详细信息,仅匹配其中一个而不匹配另一个,即可确定要更改的是哪一个。
对于更通用的解决方案,比如@mahematical.cafee的,像这样的东西可能会更好地工作(编辑以反映指定的输出):
$string = preg_replace('/>(.*)("yellow")(.*)</i',
'$0<font style="background-color:yellow;">$1</font>$2',
'Stack overflow in <font backgroundcolor="yellow"> "yellow"</font> font');
echo $string;发布于 2012-03-09 14:03:27
您可以尝试如下所示:
preg_replace('@$words(?![^<>]*>)@i',
'<font style="background-color:yellow;">$0</font>',
$string);(?![^<>]*>)是一个负面的前瞻。
它说,"match $words,但不是,如果后面紧跟:
>:表示“黄色”在HTML标签内。[^<>]*的意思是停留在当前标记内。这假设你的超文本标记语言是格式良好的--你的文本中没有不属于标签的<或> (也就是说,假设所有杂乱的<和>已经被转换成<和> )。
(根据所需输出进行更新)。
https://stackoverflow.com/questions/9629399
复制相似问题