【问题标题】:Getting an ID out of a string. Regex problem从字符串中获取 ID。正则表达式问题
【发布时间】:2010-06-28 09:29:30
【问题描述】:

我正在尝试从 URL 字符串中获取 ID。

我正在尝试使用以下代码:-

来自:

<url>http://www.monkeys.com/monkey.php?id=24</url>

我想得到“24”:-

$ID = preg_replace($url, '/^<url>.*\?id=(.*)<\/url>$/', '\1');

任何帮助将不胜感激 - 我确定这是一个常见问题,但我发现正则表达式令人困惑。

【问题讨论】:

    标签: php regex


    【解决方案1】:

    正则表达式不适合这项工作。使用

    • parse_str将字符串解析为变量
    • parse_url解析一个 URL 并返回它的组件

    例子:

    $url = "http://www.monkeys.com/monkey.php?id=24";
    parse_str(parse_url($url, PHP_URL_QUERY), $parts);
    var_dump( $parts ); // 24
    

    &lt;URL&gt; 元素中获取 URL 应该很简单。 DOM 是你的朋友。请参阅处理Reading XML with PHP 的各种其他问题以及这篇文章为什么你should not use Regex for parsing HTML

    【讨论】:

    • 出于某种原因,我没有得到它... $url = test.com/tester.php?id=212 parse_str($url, $parts); echo $parts['id'] = 没有。
    • 现在工作,没有正确地遵循你的例子。 :/ 谢谢
    【解决方案2】:

    你可以使用这个正则表达式:

    /^[^?]+\?id=(.*).*$/
    

    【讨论】:

      【解决方案3】:

      如果 ID 仅为数字:

      /\?id=(\d+)/
      

      如果ID后面什么都没有

      /\?id=(.*)/
      

      【讨论】:

      • 如果后面还有一个参数怎么办?
      • @Wim:这取决于 OP 的字符串,可能是 /\?id=(.*?)&?/
      • 是的,/\?id=(.*?)&amp;?/ 将是最通用的解决方案。
      • 更准确的是:/\?|&id=(.*?)&?/
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-06-07
      • 2014-04-09
      • 1970-01-01
      • 1970-01-01
      • 2011-06-15
      • 2016-04-05
      • 1970-01-01
      相关资源
      最近更新 更多