php - 正则表达式去除字符串中的外部 HTML 标签

标签 php html regex html-parsing

我需要一个正则表达式来去除字符串中的外部/顶级 HTML 标记,但保留内部标记。

$str = "<div>Start <br /> <span>test</span> end.</div>";

进入

$str = "Start <br /> <span>test</span> end.";

还有

$str = "<aside id="main" class="one">Start <br /> <span>test</span> end.</aside>";

进入

$str = "Start <br /> <span>test</span> end.";

.

preg_replace('/<[^>]*>/', '', $str);

删除所有标签,而不仅仅是外部标签。

最佳答案

请注意

使用正则表达式并不是修改 HTML 代码的最佳方式! 在大多数情况下,使用 DOMDocument 或 DOMDocumentFragement 对象从 HTML 代码修改或提取数据会更好也更可靠。

但是,在某些情况下,正则表达式更好,主要是在这些因素适用的情况下:

  • 您知道您编辑的 HTML 代码将有效。
  • 修改后的 HTML 结构在所有情况下都是相同的。
  • 您只需对代码进行非常简单的更改。
  • 性能很重要(例如,当它在循环内执行时)。 DOMDocument 比简单的正则表达式慢得多!

代码

要从某些 HTML 代码中去除最外层的标签,请使用此正则表达式:

/* Note: 
 * The code must start with an opening tag and end with a closing tag. 
 * No white space or other text must be present before the first 
 * tag/after the last tag, else you get some unexpected results.
 */

$contents = preg_replace( '/^<[^>]+>|<\/[^>]+>$/', '', $markup );
            // ^<[^>]+>     This removes the first tag
            // <\/[^>]+>$   This removes the last closing tag

示例

此正则表达式适用于大多数 HTML 标记,例如

In: '<div class="my-text" id="text" style="color:red">some text</div>'
Out: 'some text' (expected result)

当第一个标签包含“>”字符时,它将破坏所有内容,例如

In: '<div title="Home > Archives">Archive overview</div>'
Out: ' Archives">Archive overview' (unexpected result)

开头或结尾的空格/文本也会破坏正则表达式

In: '<div>Your name</div>:'
Out: 'Your name</div>:' (unexpected result)

当然,任何标签都将被剥离,没有任何健全性检查,例如

In: '<h2>Settings</h2><label>Page Title</label>'
Out: 'Settings</h2><label>Page Title' (unexpected result)

关于php - 正则表达式去除字符串中的外部 HTML 标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28670888/

相关文章:

php - 检测上传的图像有多少种颜色

php - 刷新页面时重复插入相同的数据

html - SAPUI5:创建以图标为中心的 GenericTile

javascript - 有条件地从字符串中删除数字

Java 正则表达式 不区分大小写,带有德语变音符号

php - 将消息 TTL 设置为一小时 RabbitMQ

PHP 发生 fatal error ,行号不存在

html - IE8 无法正确呈现 HTML

javascript - IE9 不反射(reflect) javascript 对页面的更改

javascript - 正则表达式未捕获 <img 标记内的 Url