我有一些字符串,包括标签,下划线和ID:
我想要的是两个不同的块:
我知道我可以隔离数值,然后转身并从原始字符串中减去它,但我不确定是否有更简洁的方法可以一步完成。爆炸的limit
参数似乎很接近,我觉得有一个正则表达式模式只能被最后一个下划线分开。
答案 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);