简单来说,
我有一个前缀为“msg”的字符串,后跟一些用作列表项 ID 的数字
例如
<li id="msg1"></li>..............<li id="msg1234567890"></li>
获取数字的最有效方法是什么?
在 VB 中,我会执行以下操作:
str = "msg1"
str = right(str,len(str)-3)
我如何在 PHP 中做类似(或更高效)的事情?
在 php 中也是一样(使用 substr):
$str = "msg1";
$str = substr($str,3);
只需使用预浸料:
preg_match_all('%<li id="msg(\d+)"></li>%i', $subject, $result, PREG_PATTERN_ORDER);
substr( $string, 3 );
解析有效的 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,
)