分隔字符串的数字和非数字部分的最有效方法是什么?

时间:2011-12-21 03:23:12

标签: php regex

我有一些字符串,包括标签,下划线和ID:

  • “category_4”
  • “office_362”
  • “core_market_56”

我想要的是两个不同的块:

  • array(“category”,4)
  • array(“office”,362)
  • array(“core_market”,56)

我知道我可以隔离数值,然后转身并从原始字符串中减去它,但我不确定是否有更简洁的方法可以一步完成。爆炸的limit参数似乎很接近,我觉得有一个正则表达式模式只能被最后一个下划线分开。

3 个答案:

答案 0 :(得分:2)

这是你想要的正则表达式

(\w*)_(\d*)

第一个匹配的组是你的单词,第二个 - 数字。当然,这是基于数字总是在最后并且通过下划线与单词分开的假设。

答案 1 :(得分:2)

$strings = array("category_4","office_362","core_market_56");
foreach($strings as &$string)
{
  preg_match('/(\w*)_(\d*)/', $string, $matches);
  $string = array($matches[1],$matches[2]);
}
print_r($strings);

以上将返回

([0] => Array (
            [0] => category
            [1] => 4)
 [1] => Array (
            [0] => office
            [1] => 362)
 [2] => Array (
            [0] => core_market
            [1] => 56))

答案 2 :(得分:0)

我认为解析目的最有效的方法是在末尾有一个固定长度数字字段,这样你就可以始终从中确定一个确切的字符数。字符串的结尾,并知道其余的(减去分隔符)将是文本移植。

# Example with fixed length numeric portion of 8 digits
$N = 8;
$s = "SomeText_00000001";
$text = substr($s, 0, strlen($s) - $N - 1);
$num = substr($s, -$N);
相关问题