gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 01:00:28 24 4
gpt4 key购买 nike

我需要一个正则表达式来去除字符串中的外部/顶级 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com