【问题标题】:PHP extract ID from a stringPHP从字符串中提取ID
【发布时间】:2012-12-03 14:47:07
【问题描述】:

例如:Lorem ipsum dolor sit amet,[ID: 123] Suspendisse [blahsh 68] condimentu

我如何获得 123?

我在第一部分检查字符位置:

$pos = strrpos($l, "ID: ");
if ($pos === false) {
    $id = 123;
}

【问题讨论】:

  • 我猜我需要学习正则表达式。任何人都可以推荐一个开始/参考的好地方吗?
  • ID 总是用方括号括起来吗?
  • @JohnMagnolia regular-expressions.info 是最好的起点,尽管它很密集。这是一个非常全面的参考。
  • 是的,我尝试将其捡起,但似乎代码中没有逻辑并且完整的 gobbledigook。看起来像

标签: php regex


【解决方案1】:

这最容易用正则表达式处理。

$matches = array();
$pattern = '/^.*\[ID:\s+(\d+)\].*$/';
preg_match($pattern, "Lorem ipsum dolor sit amet, [ID: 123] Suspendisse [blahsh 68] condimentu", $matches);


// Your number is in $matches[1]
Array
(
    [0] => Lorem ipsum dolor sit amet, [ID: 123] Suspendisse [blahsh 68] condimentu
    [1] => 123
)

该模式匹配[ID:,后跟任意数量的空格,通过\s+。然后(\d+) 捕获数字序列。 [] 括号需要转义为 \[ \],因为它们是正则表达式中的元字符。

如果您对表达式的其余部分感兴趣:

  • ^.* 是字符串的开头以及后面的任何其他内容...
  • .*$ 是在上面已经解释的匹配部分之后直到字符串末尾的任何其他内容。

【讨论】:

    【解决方案2】:

    如果字符串总是 [ID:1234] 可能会这样

    $str='Lorem ipsum dolor sit amet, [ID: 123] Suspendisse [blahsh 68] condimentu';
    preg_match_all("~\[ID:\s(.*?\d+)\]~",$str,$match);
    echo $match[1][0];
    

    【讨论】:

      猜你喜欢
      • 2014-04-02
      • 2014-06-24
      • 1970-01-01
      • 1970-01-01
      • 2017-04-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多