0

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

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

4 回答 4

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,然后解析 URL 并仅返回my_id查询值(如果它设置在这样的 URL 中)。

于 2012-10-12T15:27:31.283 回答
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);

我的正则表达式不是很严格,但它要求 ?my_id=123 出现在<a>标签内。

于 2012-10-12T15:16:40.763 回答
1

这将为您提供所有数字,直到“my_id =”字符串之后的第一个非数字字符。

$pattern = "@my_id=(\d+)@i";
preg_match_all($pattern, $inputString, $matches);

您应该在 $matches[1]; 中找到匹配的项目;

于 2012-10-12T15:16:37.150 回答
0
preg_match_all("~my_id=(\d+)\">~", $html, $match);
print_r($match[1]);

preg_match_all 会给你每场比赛,而不是像 preg_match 这样的一场比赛。正则表达式语句将查找 my_id= ,然后抓住它后面的数字。并在看到 "> 后停止如果您担心任何地方可能有空格,请确保将 \s* 放入正则表达式语句中。

于 2012-10-12T15:14:46.713 回答