【问题标题】:What is the correct regex (for PHP preg_replace) to remove empty paragraph ( <p> ) tags?删除空段落( <p> )标签的正确正则表达式(用于 PHP preg_replace)是什么?
【发布时间】:2010-09-20 22:08:20
【问题描述】:

我正在使用 Wordpress,需要能够删除图像和空白段落。到目前为止,我已经发现了如何毫无问题地删除图像。但是,我需要删除空段落标签。我正在使用 PHP preg_replace 来处理正则表达式函数。

所以,作为一个例子,我有字符串:

<p style="text-align:center;"><img src="http://www.blah.com/image.jpg" alt="Blah Image" /></p><p>Some text</p>

我在上面运行这个正则表达式:

/<img.*?(>)/

我最终得到了这个字符串:

<p style="text-align:center;"></p><p>Some text</p>

然后我需要能够删除空段落。我试过这个,但它删除了所有段落和段落的内容:

/<p[^>]*><\/p[^>]*>/

非常感谢任何帮助/建议!

【问题讨论】:

  • 我在regexpal.com 上尝试过,它与示例字符串匹配得很好......
  • 请阅读stackoverflow.com/questions/1732348/…,然后使用其他用于解析HTML的解决方案,例如XSLT、DOM或simplehtmldom.sourceforge.net
  • @Kyte 谢谢!正则表达式确实有效。我现在意识到还有一些其他问题需要首先解决。
  • re: XSLT - 通常是的,但这是来自 wordpress,这意味着十分之九的人从 MS Word 粘贴它,它是无效的任何东西(除了一个字符串)。
  • 他没有解析 HTML,他只是剥离了一些标签。我认为这是一种合理的方法,但是@matthewpavkov,如果您使用“/”以外的字符来分隔您的正则表达式,您的任务将变得更容易。然后你不必在你的表达式中逃避正斜杠。 '#' 字符是一个典型的替代品,例如:'#

    ]*>

    [^>]*>#'。顺便说一句,您的正则表达式在 PHP 5.2.6 中按预期工作,使用 preg_replace()。

标签: php regex wordpress preg-replace


【解决方案1】:

正确的正则表达式是没有正则表达式。请改用 HTML/DOM 解析器。它们使用简单。正则表达式适用于常规语言(HTML 不是)。

【讨论】:

  • 感谢您的信息。我得看看这个。
【解决方案2】:

/&lt;p[^&gt;]*&gt;&lt;\/p[^&gt;]*&gt;/(您提供的正则表达式)应该可以正常工作。如果它给您带来麻烦,您可以尝试双重转义 /,如下所示:/&lt;p[^&gt;]*&gt;&lt;\\/p[^&gt;]*&gt;/

PHP 对引用和转义字符很有趣。例如"\n" 不等于'\n'。第一个是换行符,第二个是文字反斜杠,后跟一个“n”。字符串文字的 PHP 手动条目可能值得快速查看。

【讨论】:

  • "/n" 和 '/n' 是相同的; each 是一个由正斜杠后跟一个“n”组成的两个字符的字符串。此外,您的双重转义建议会在正则表达式中引入虚假的反斜杠。
  • 嘿,那些应该是反斜杠。我认为,如果它在单引号字符串而不是双引号字符串中,则需要双转义。让我仔细检查一下。
  • 双重转义建议不会在正则表达式中插入任何额外的字符。不过也无济于事。事实上它什么也没做。
猜你喜欢
  • 2016-03-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-13
  • 1970-01-01
  • 2018-02-08
  • 1970-01-01
  • 2016-08-15
相关资源
最近更新 更多