【发布时间】:2016-01-29 22:01:10
【问题描述】:
我对正则表达式一无所知。但我需要解决这个问题。 我想替换标签之外的所有文本。(如果有任何标签)
这是我的代码:
$entry = preg_replace("'\(find: (.*)\)'Ui","(find: <a href=\"/search/\\1/\"><b>\\1</b></a>)",$entry);
它应该在 html 标记之外替换 (find: foo)。
我试过这个,但没有用。因为我不懂正则表达式:(
preg_replace("'([^<]+?>)\(find: (.*)\)([^<]+?>)'Ui","(find: <a href=\"/find/\\1/\"><b>\\1</b></a>)",$entry);
提前谢谢你。 :)
编辑:这是我的例子:
// some users do this. and it brokes the text.
$entry = "blablabla (find: (user: bora)) blablabla ";
function entry($entry) {
$entry = preg_replace("'\(find: (.*)\)'Ui","<a href=\"/find/\\1/\"><b>\\1</b></a>",$entry);
$entry = preg_replace("'\(user: (.*)\)'Ui","(user: <a href=\"/user/\\1/\"><b>\\1</b></a>)",$entry);
$entry = stripslashes($entry);
return $entry;
}
【问题讨论】:
-
使用 DOMXPath 提取包含您要查找的内容的文本节点。
-
你应该永远用正则表达式解析 HTML。请改用a PHP DOM parser。
-
如果这是 HTML,则所有文本都包含在标签中,最终由
body或html标签包装。那你什么意思? -
感谢您的快速回复。但我一个都不知道。我只是个业余爱好者。我买了脚本,发现了这个问题。你能帮我做正则表达式吗?
-
@trincot $entry 只是文本。但是有多个 preg_replace。
标签: php html regex preg-replace