我有一些带字母数字值的字符串数据。例如 us01name,phc01name 和其他,即 alphabates + number + alphabates 。
我想在第一个字符串中获得第一个字母字母+数字,在第二个字符串中 。
我怎么能在php中做到这一点?
答案 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
)