如何搜索字符串并获取值?

时间:2012-10-12 15:09:00

标签: php string search

我该怎样做?例如,我有这个文本(这是一个源代码):

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
希望你了解我。谢谢!

4 个答案:

答案 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 *放在正则表达式语句中。