【发布时间】:2011-08-21 23:02:31
【问题描述】:
我正在寻找一种使用 PHP 解析子字符串的方法,并且遇到了 preg_match 但是我似乎无法制定出我需要的规则。
我在解析一个网页,需要从字符串中抓取一个数值,字符串是这样的
producturl.php?id=736375493?=tm
我需要能够获取这部分字符串:
736375493
谢谢亚伦
【问题讨论】:
标签: php regex parsing substring
我正在寻找一种使用 PHP 解析子字符串的方法,并且遇到了 preg_match 但是我似乎无法制定出我需要的规则。
我在解析一个网页,需要从字符串中抓取一个数值,字符串是这样的
producturl.php?id=736375493?=tm
我需要能够获取这部分字符串:
736375493
谢谢亚伦
【问题讨论】:
标签: php regex parsing substring
$matches = array();
preg_match('/id=([0-9]+)\?/', $url, $matches);
如果格式发生变化,这是安全的。如果 URL 中有任何其他数字,则 slandau 的答案将不起作用。
【讨论】:
preg_match('/id=(.*)\?/', $url, $matches);,现在可以完美运行。谢谢:)
<?php
$string = "producturl.php?id=736375493?=tm";
preg_match('~id=(\d+)~', $string, $m );
var_dump($m[1]); // $m[1] is your string
?>
【讨论】:
$string = "producturl.php?id=736375493?=tm";
$number = preg_replace("/[^0-9]/", '', $string);
【讨论】:
producturl.php?id=736375493?=tm&page=2,您的$number 中会多出一个2。
preg_match('/id(.*)=', $body, $matches); 但它仍然在某些行的数字末尾给我 =tm。
不幸的是,您有一个格式错误的 url 查询字符串,因此正则表达式技术是最合适的。见what I mean。
不需要捕获组。只需匹配id=,然后用\K 忘记那些字符,然后隔离以下一个或多个数字字符。
代码 (Demo)
$str = 'producturl.php?id=736375493?=tm';
echo preg_match('~id=\K\d+~', $str, $out) ? $out[0] : 'no match';
输出:
736375493
【讨论】: