首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >preg_replace函数:如何搜索字符串而不考虑其中的节?

preg_replace函数:如何搜索字符串而不考虑其中的节?
EN

Stack Overflow用户
提问于 2012-03-09 13:32:03
回答 2查看 965关注 0票数 0
代码语言:javascript
复制
$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时避免字体标签?

编辑-所需的输出(引入换行符只是为了便于阅读)

代码语言:javascript
复制
Stack overflow in <font backgroundcolor="yellow">
<font style="background-color:yellow">"yellow"</font></font> font
EN

回答 2

Stack Overflow用户

发布于 2012-03-09 13:45:32

我认为你正在寻找的是(作为一行程序,因为我认为在这种情况下它实际上有助于可读性):

代码语言:javascript
复制
$string = preg_replace('/backgroundcolor="yellow"/i',
 'style="background-color:yellow;"',
 'Stack overflow in <font backgroundcolor="yellow"> "yellow"</font> font');
echo $string;

..。这将输出"Stack overflow in“黄色”字体“

相反,如果你的意思是你想替换“黄色”的另一个实例,那么这就是你想要的:

代码语言:javascript
复制
$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的,像这样的东西可能会更好地工作(编辑以反映指定的输出):

代码语言:javascript
复制
$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;
票数 0
EN

Stack Overflow用户

发布于 2012-03-09 14:03:27

您可以尝试如下所示:

代码语言:javascript
复制
preg_replace('@$words(?![^<>]*>)@i',
             '<font style="background-color:yellow;">$0</font>',
             $string);

(?![^<>]*>)是一个负面的前瞻。

它说,"match $words,但不是,如果后面紧跟:

  • a >:表示“黄色”在HTML标签内。[^<>]*的意思是停留在当前标记内。

这假设你的超文本标记语言是格式良好的--你的文本中没有不属于标签的<> (也就是说,假设所有杂乱的<>已经被转换成&lt;&gt; )。

(根据所需输出进行更新)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9629399

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档