【发布时间】:2023-04-02 09:35:01
【问题描述】:
目前我正在用特殊引号替换文本中的所有引号。 但是我怎样才能改变我的正则表达式,只替换文本内的引号,而不是那些在 html 标签中使用的。
$text = preg_replace('/"(?=\w)/', "»", $text);
$text = preg_replace('/(?<=\w)"/', "«", $text);
我不太适合正则表达式。问题是我需要用另一个符号而不是结束引号替换起始引号。
如果您确实需要更多信息,请说出来。
感谢任何帮助!
编辑
测试用例
<p>This is a "wonderful long text". At least it should be. Here we have a <a href="http://wwww.site-to-nowhere.com" target="_blank">link</a>.</p>
预期的输出应该是:
<p>This is a »wonderful long text«. At least it should be. Here we have a <a href="http://wwww.site-to-nowhere.com" target="_blank">link</a>.</p>
现在是这样的:
<p>This is a »wonderful long text«. At least it should be. Here we have a <a href=»http://wwww.site-to-nowhere.com« target=»_blank«>link</a>.</p>
编辑 2
感谢 Kamehameha 的回答,我在脚本中添加了以下代码:
$text = preg_replace("/\"([^<>]*?)\"(?=[^>]+?<)/", "&raquo;\1&laquo;", $text);
在正则表达式测试器中效果很好并不能替代任何东西。我是不是做错了什么?
【问题讨论】:
-
一些测试用例以及输出应该如何?
-
安全、缓慢且明显的方法:放入 HTML/XML 解析库并操作文本节点?
-
@AmitJoki:我添加了一个例子!
-
@TobiasKun,看看我的回答
-
@UlrichSchwarz:谢谢输入。我自己也想过,但真心希望有更好的正则表达式方法!