PHP 正则表达式 点匹配换行符

发布于 2024-10-26 11:17:18 字数 228 浏览 1 评论 0原文

我想出了一个正则表达式来抓取 2 个 HTML 标签之间的所有文本。这是我到目前为止所拥有的:

]*>(.*?)

实际上,这应该可以完美地工作。但是在 PHP preg_replace 中使用选项执行它: /ims 会导致整个字符串匹配。

如果我删除 /s 标签,它可以正常工作,但标签之间有换行符。有更好的方法来解决这个问题吗?

I am come up with a regex to grab all text between 2 HTML tags. This is what I have so far:

<TAG[^>]*>(.*?)</TAG>

In practice, this should work perfectly. But executing it in PHP preg_replace with options: /ims results in the WHOLE string getting matched.

If I remove the /s tag, it works perfectly but the tags have newlines between them. Is there a better way on approaching this?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

猫性小仙女 2024-11-02 11:17:18

当然还有更好的方法。 不要使用正则表达式解析 HTML

DOMDocument 应该能够更好地适应您:

$dom = new DOMDocument();
$dom->loadHTMLFile('filename.html');

$tags = $dom->getElementsByTagName('tag');

echo $tags[0]->textContent; // Contents of `tag`

您可能需要调整上面的代码(尚未经过测试) 。

Of course there's a better way. Don't parse HTML with regex.

DOMDocument should be able to accommodate you better:

$dom = new DOMDocument();
$dom->loadHTMLFile('filename.html');

$tags = $dom->getElementsByTagName('tag');

echo $tags[0]->textContent; // Contents of `tag`

You may have to tweak the above code (hasn't been tested).

琴流音 2024-11-02 11:17:18

我不建议使用正则表达式来匹配完整的 HTML,但是,您可以使用“dottal”标志:
/REGEXP/s

示例:

$str = "<tag>
fvox
</tag>";

preg_match_all('/<TAG[^>]*>(.*?)</TAG>/is', $str, $r);
print_r($r); //dump

I don't recommend use regex to match in full HTML, but, you can use the "dottal" flag:
/REGEXP/s

Example:

$str = "<tag>
fvox
</tag>";

preg_match_all('/<TAG[^>]*>(.*?)</TAG>/is', $str, $r);
print_r($r); //dump
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文