【问题标题】:preg_replace part of HTML codepreg_replace 部分 HTML 代码
【发布时间】:2016-09-08 15:29:23
【问题描述】:

我在使用str_replace 时遇到了一个问题,所以我决定使用preg_replace,但在这里我得到的结果甚至与str_replace 得到的结果相近。

示例代码如下所示:

$find_url = '<h3 class="rcc"><a href="'.$new_url;
$replace = '<h3 class="rcc" style="background-color: #ffff00;"><a href="'.$new_url;
$new_data = preg_replace('/$find_url\b/i', $replace, $data);

其中$datafile_get_contents 的输出

任何线索为什么preg_replace 在这种情况下不起作用?

【问题讨论】:

  • $new_url 中有什么内容?如果它是绝对 url,那么您正在执行 preg_replace('/&lt;h3&gt;.....href="http://etc...') 并且 http:// 中的 / 正在终止您的模式,从而导致正则表达式语法错误。坦率地说:不要使用正则表达式来破坏 html。使用 DOM。这就是它的用途。
  • 是的,它看起来像我得到的 URL 是绝对的。旁注 - 有关 DOM 如何替换的任何示例?
  • 如果您将任意文本插入到模式中,请使用 preg_quote()。
  • 我已经用 preg_quote() 包裹了 $find_url$replace 并得到了输出,但没有被替换。

标签: php replace preg-replace str-replace


【解决方案1】:
$regexlink = '#<h3 class="rcc"><a([^>]*) href="([^"/]*/?[^".]*\.[^"]*)"([^>]*)>#';
$replacelink = '<h3 class="rcc" style="background-color: #ffff00;"><a href="$2"  >';
$result = preg_replace($regexlink, $replacelink, $inputdata);

【讨论】:

  • $new_url 是一个变量,在此基础上添加了background-color
【解决方案2】:

简单的答案 - 在preg_replace() 中使用双引号

$new_data = preg_replace("/$find_url\b/i", $replace, $data);

单引号 - 正则表达式将美元符号解释为“模式”的结尾。

【讨论】:

  • 我的测试样本(从 $find_url 复制一个包含双引号的子字符串)实际上与双引号模式完美配合,但不是单引号模式。
猜你喜欢
  • 2014-04-24
  • 2012-07-24
  • 2013-05-22
  • 1970-01-01
  • 2011-01-29
  • 1970-01-01
  • 2014-06-10
  • 2012-12-28
  • 1970-01-01
相关资源
最近更新 更多