解析 HTML 并隔离在具有 id 属性的合格标签的已知前缀之后找到的整数

问题描述 投票:0回答:4

简单来说,

我有一个前缀为“msg”的字符串,后跟一些用作列表项 ID 的数字

例如

<li id="msg1"></li>..............<li id="msg1234567890"></li>

获取数字的最有效方法是什么?

在 VB 中,我会执行以下操作:

str = "msg1"
str = right(str,len(str)-3)

我如何在 PHP 中做类似(或更高效)的事情?

php arrays string html-parsing text-extraction
4个回答
3
投票

在 php 中也是一样(使用 substr):

$str = "msg1";
$str = substr($str,3);

0
投票

只需使用预浸料:

preg_match_all('%<li id="msg(\d+)"></li>%i', $subject, $result, PREG_PATTERN_ORDER);

0
投票

0
投票

解析有效的 HTML 时,请使用 HTML 解析器。

下面演示了如何使用 DomDocument 和 XPath 查询来专门定位带有

li
前缀的
msg
值的
id
元素,然后在推送之前使用
sscanf()
隔离
msg
之后的整数(转换为整数)进入结果数组。

代码:(演示

$html = <<<HTML
<ul>
    <li id="msg1"></li>
    <li id="msg1234567890"></li>
</ul>
HTML;

$dom = new DomDocument();
$dom->loadHTML($html);
$xpath = new DOMXPath($dom);
$result = [];
foreach ($xpath->evaluate("//li[starts-with(@id, 'msg')]/@id") as $id) {
    sscanf($id->nodeValue, 'msg%d', $result[]);
}
var_export($result);

输出:

array (
  0 => 1,
  1 => 1234567890,
)
© www.soinside.com 2019 - 2024. All rights reserved.