如何在数字位置将字符串分解为单词

时间:2011-05-20 02:54:54

标签: php string

我有一些带字母数字值的字符串数据。例如 us01name,phc01name 和其他,即 alphabates + number + alphabates

我想在第一个字符串中获得第一个字母字母+数字,在第二个字符串中

我怎么能在php中做到这一点?

3 个答案:

答案 0 :(得分:2)

您可以使用正则表达式:

// if statement checks there's at least one match
if(preg_match('/([A-z]+[0-9]+)([A-z]+)/', $string, $matches) > 0){
    $firstbit = $matches[1];
    $nextbit  = $matches[2];
}

只是将正则表达式分解为部分,以便您知道每个位的作用:

(              Begin group 1
  [A-z]+         As many alphabet characters as there are (case agnostic)
  [0-9]+         As many numbers as there are
)              End group 1
(              Begin group 2
  [A-z]+         As many alphabet characters as there are (case agnostic)
)              End group 2

答案 1 :(得分:1)

试试这段代码:

preg_match('~([^\d]+\d+)(.*)~', "us01name", $m);
var_dump($m[1]); // 1st string + number
var_dump($m[2]); // 2nd string

输出

string(4) "us01"
string(4) "name"

即使这种限制性更强的正则表达式也适用于您:

preg_match('~([A-Z]+\d+)([A-Z]+)~i', "us01name", $m);

答案 2 :(得分:0)

您可以对带有模式捕获标志的数字使用preg_split。它会返回所有碎片,因此您必须将它们重新组合在一起。但是,在我看来,它比完整的模式正则表达式更直观,更灵活。另外,preg_split()未被充分利用:)

代码:

$str = 'user01jason';
$pieces = preg_split('/(\d+)/', $str, -1, PREG_SPLIT_DELIM_CAPTURE);
print_r($pieces);

输出:

Array
(
    [0] => user
    [1] => 01
    [2] => jason
)