【问题标题】:Replace only quotes of a specific tag in a string php仅替换字符串php中特定标签的引号
【发布时间】:2021-07-27 00:39:45
【问题描述】:

在这样的字符串中

Améliorer <span style="color:black;">mon authentification</span>

我正在尝试替换它

style="color:black;"

style= \ "color:black; \ "

我正在尝试这样使用 preg_replace

$result = preg_replace('/(<*[^>]*style=)"[^>]+"([^>]*>)/', '\1\"300\"\2', $data);

但是这样我只改变了样式属性的内容,而内容应该保持不变。

我只能在样式属性上更改它,因为我需要在字符串中保留一些双引号(所以我不能 str_replace)

谢谢

【问题讨论】:

  • str_replace('"', ' \ "') 可以解决问题。
  • 问题是字符串可能包含我不需要更改的双引号
  • 好吧,你应该把这个添加到你的问题中,因为现在它只有一个字符串:)
  • 我的回答有帮助吗?

标签: php regex escaping preg-replace preg-replace-callback


【解决方案1】:

你可以使用

$data = 'Améliorer <span style="color:black;">mon authentification</span>';
echo preg_replace('/(<[^>]*\sstyle=)"([^"]+)"([^>]*>)/', '\1\"\2\"\3', $data);

请参阅PHP demoregex demo

详情

  • (&lt;[^&gt;]*\sstyle=) - 第 1 组:&lt;,然后是除 &gt; 之外的任何零个或多个字符,然后是空格和 style= 字符串
  • " - 双引号
  • ([^"]+) - 第 2 组:" 以外的任何一个或多个字符
  • " - 一个 " 字符
  • ([^&gt;]*&gt;) - 第 3 组:除 &gt;&gt; 字符之外的任何零个或多个字符。

请注意,我们需要保留的部分周围有三个捕获组,并且双引号被留在捕获组之外,以便可以替换/删除它们。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-05-08
    • 1970-01-01
    • 2020-05-24
    • 2015-04-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多