【问题标题】:preg_match with exclusion [closed]preg_match 排除[关闭]
【发布时间】:2011-12-01 19:29:10
【问题描述】:

我遇到了以下问题。

在将 HTML 渲染到浏览器之前,我需要对其进行清理。

目前的正则表达式匹配像“{varname}”这样的东西到目前为止没有问题,但是我需要排除在脚本标签中找到的匹配项。

*例子有点不清楚,所以更新了* 示例:

<html>
<head></head>
<body>
this is an example `{var}` variable, <- this should be matched/removed
    <script>
    // don't match below arguments in other words don't let regex remove them/match them
    myMethod("{param1:'foo', param2:'bar'}");
    </script>
</body>
</html>

【问题讨论】:

  • 我不确定你在这里问什么,但听起来你正在用正则表达式解析 HTML。 Don't do that。使用 HTML 解析器。
  • 你想做什么?我在这里有点困惑。
  • 嗨 Macek,我没有用正则表达式解析 html,我正在清理.. 供您参考,数据由 CodeIgniter 的解析器设置,(CI 使用 {} 作为参数/变量)但是我不希望在浏览器的输出中出现 {} (当未定义 vars 时会发生这种情况)。所以这就是我想清理的原因,但是我想把括号保留在 javascript 中。
  • 治疗根本原因(未定义的变量)而不是症状不是更好吗?
  • 您当前的代码是什么?只是一个猜测:让它更具体已经可以避免与空格、冒号、引号匹配的内容。

标签: php regex preg-match


【解决方案1】:

使其具体并仅匹配字母数字字符:

preg_replace("~\{(\w+)}~i", "", $sContent); 

已经可以避免{x: 'y'} 示例问题了。


要排除带有 preg 的文档部分,请使用 preg_replace_callback;将不需要的 (&lt;script&gt;.+?&lt;/script&gt;)|... 列为第一个替代项,然后在回调中切换句柄。

【讨论】:

  • tnxx.. 我太傻了,专注于排除脚本问题,我错过了一些简单的事情,比如只匹配字母数字.. Tnxx!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多