我该怎样做?例如,我有这个文本(这是一个源代码):
Welcome to asdfasdf, <h2>Welcome</h2>, <a href="index.php?my_id=1">Homepage</a>,
<br />, Hi, this is some text.
Check <a href="index.php?my_id=12945">this link</a> or
<a href="index.php?my_id=138>this link</a> for more information.
<br /><strong>Thanks</strong>
现在我想用php搜索“my_id”这个字符串并显示所有id。所以输出将是:
1
12945
138
希望你了解我。谢谢!
答案 0 :(得分:3)
您可以在html字符串上运行正则表达式,以使用preg_match_all
提取隔离的数值:
$ids = preg_match_all('/\b\d+\b/', $html, $m) ? $m[0] : FALSE;
为您提供$ids
以下结果:
array(3) {
[0] =>
string(1) "1"
[1] =>
string(5) "12945"
[2] =>
string(3) "138"
}
但是,一般的说法是,您应该使用HTML解析器来获取这些值:
$ids = array_reduce(
simplexml_import_dom(@DomDocument::loadHTML($html))->xpath('//a/@href')
, function($a, $v) {parse_str(parse_url($v, 6), $m); @($m = $m['my_id']) ? $a[] = $m : 0; return $a;}
);
这会为您提供相同的结果,但完全会查看href
标记的a
属性,然后解析该网址并仅返回{{1}如果在这样的URL中设置了查询值。
答案 1 :(得分:2)
这是:
<?php
$str='Welcome to asdfasdf, <h2>Welcome</h2>, <a href="index.php?my_id=1">Homepage</a>,
<br />, Hi, this is some text.
Check <a href="index.php?my_id=12945">this link</a> or
<a href="index.php?my_id=138>this link</a> for more information.
<br /><strong>Thanks</strong>';
$res = array();
preg_match_all('~<a[^>]*?\?my_id=([0-9]+)[^>]*?>~uis', $str, $res);
print_r($res);
我的正则表达式不是很严格,但它要求在<a>
标记内显示?my_id = 123。
答案 2 :(得分:1)
这将为您提供所有数字,直到“my_id =”字符串后面的第一个非数字字符。
$pattern = "@my_id=(\d+)@i";
preg_match_all($pattern, $inputString, $matches);
您应该在$ matches [1];
中找到匹配的项目答案 3 :(得分:0)
preg_match_all("~my_id=(\d+)\">~", $html, $match);
print_r($match[1]);
preg_match_all将为您提供每场比赛,而不仅仅是preg_match。 正则表达式语句将查找my_id =然后抓取它后面的数字。并且在它看到“&gt;之后停止,如果您担心在任何地方可能有空格,请确保将\ s *放在正则表达式语句中。