【问题标题】:PHP Using RegEx to get substring of a stringPHP使用RegEx获取字符串的子字符串
【发布时间】:2011-08-21 23:02:31
【问题描述】:

我正在寻找一种使用 PHP 解析子字符串的方法,并且遇到了 preg_match 但是我似乎无法制定出我需要的规则。

我在解析一个网页,需要从字符串中抓取一个数值,字符串是这样的

producturl.php?id=736375493?=tm

我需要能够获取这部分字符串:

736375493

谢谢亚伦

【问题讨论】:

    标签: php regex parsing substring


    【解决方案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&amp;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
    

    【讨论】:

      猜你喜欢
      • 2014-11-18
      • 1970-01-01
      • 2014-06-24
      • 2015-06-24
      • 1970-01-01
      • 2015-08-21
      • 1970-01-01
      • 2023-01-07
      • 2012-06-30
      相关资源
      最近更新 更多