拆分名称和ID

时间:2012-02-15 14:31:11

标签: php regex

我有一个字符串

  

“JonSmith02-11-1955”

我用 preg_split获得JonSmith(reg ='[0-9-]')然后再做一次('[a-zA-Z] \')以获得他的生日。 有没有更好的方法让他们在一次分裂?

5 个答案:

答案 0 :(得分:4)

/(?<=[a-z])(?=\d)/i

适用于这种情况。它匹配前面有一个字母后跟一个数字的位置。有关详细信息,请参阅lookbehinds and -aheads

如果名称可以包含数字,则无效。

DEMO

答案 1 :(得分:2)

^(.*)(\d{2})\-(\d{2})\-(\d{4})$怎么样? 它会将您的字符串分为四个部分:JonSmith02111955

答案 2 :(得分:1)

^([a-zA-z]*)([0-9]*)\-(.+)*$

对于这个例子:

JonSmith02-11-1955

给:

JonSmith
02
11-1955

enter image description here

答案 3 :(得分:1)

尝试/(\w*)(\d{2}-\d{2}-\d{4})/作为你的正则表达式 - 其他人可以更有效地做到这一点。这将为您提供两个捕获组,所以

$array = preg_match_all('/(\w*)(\d{2}-\d{2}-\d{4})/', "JonSmith02-11-1955");
print_r($array); 
/*
Array
(
    [0] => Array
        (
            [0] => JonSmith02-11-1955
        )

    [1] => Array
        (
            [0] => JonSmith
        )

    [2] => Array
        (
            [0] => 02-11-1955
        )

)

*/

答案 4 :(得分:0)

preg_match('/([a-z]+)([0-9-]+)/i', 'JonSmith02-11-1955', $matches);
echo "Name is $matches[1]<br>\n";
echo "Birth date is $matches[2]<br>\n";

See it working