PHP使用RegEx获取字符串的子字符串
Posted
技术标签:
【中文标题】PHP使用RegEx获取字符串的子字符串【英文标题】:PHP Using RegEx to get substring of a string 【发布时间】:2011-08-21 23:02:31 【问题描述】:我正在寻找一种使用 php 解析子字符串的方法,并且遇到了 preg_match 但是我似乎无法制定出我需要的规则。
我在解析一个网页,需要从字符串中抓取一个数值,字符串是这样的
producturl.php?id=736375493?=tm
我需要能够获取这部分字符串:
736375493
谢谢亚伦
【问题讨论】:
【参考方案1】:$matches = array();
preg_match('/id=([0-9]+)\?/', $url, $matches);
如果格式发生变化,这是安全的。如果 URL 中有任何其他数字,则 slandau 的答案将不起作用。
php.net/preg-match
【讨论】:
感谢您的建议,我最初尝试了此代码,但没有成功,因此我将其调整为preg_match('/id=(.*)\?/', $url, $matches);
,现在可以完美运行。谢谢:)【参考方案2】:
<?php
$string = "producturl.php?id=736375493?=tm";
preg_match('~id=(\d+)~', $string, $m );
var_dump($m[1]); // $m[1] is your string
?>
【讨论】:
它在 $m[1] 中,因为(来自文档):“如果提供了匹配项,则将其填充为搜索结果。$matches[0] 将包含与完整模式,$matches[1] 将具有匹配第一个捕获的带括号的子模式的文本,依此类推。”【参考方案3】:$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。【参考方案4】:
不幸的是,您有一个格式错误的 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
【讨论】:
以上是关于PHP使用RegEx获取字符串的子字符串的主要内容,如果未能解决你的问题,请参考以下文章
CUDA、Boost 和 Cmake “字符串子命令 REGEX,模式 MATCHALL 需要至少 5 个参数来命令。”