回答
如果他们都是一个系列的α,随之而来的一系列数字的,没有非字母数字字符,然后sscanf()可能比正则表达式
$example = 'AAA11111';
list($alpha,$numeric) = sscanf($example, "%[A-Z]%d");
var_dump($alpha);
var_dump($numeric);
preg_split
应该做的工作罚款更有效。
preg_split('/(\w+)/', $input, -1, PREG_SPLIT_DELIM_CAPTURE);
预浸库在处理字符串出奇的高效率,所以我会假设它是比任何你可以手工编写,使用更原始的字符串函数更有效率。但做一个测试,并为自己看。
'preg_split' v/s'sscanf'作为@Mark Baker建议。 sscanf会更有效率吗? – 2012-07-13 19:55:57
不能说 - 我会建议做一个测试。使用preg可以让preg执行自己的内存管理。 PHP的变量分配相当昂贵。 – troelskn 2012-07-13 19:59:03
而不是使用正则表达式的直线距离,你可以添加例如一个额外的检查:
if (ctype_alpha($testcase)) {
// Return the value it's only letters
} else if(ctype_digit($testcase)) {
// Return the value it's only numbers
} else {
//RegEx your string to split nums and alphas
}
编辑:显然,我的回答并没有给出证据,这将有更好的表现,这就是为什么我这样做,生产测试结果如下:
- 使preg_split了5.3319189548492秒
- 的sscanf了3.4432129859924秒
而答案应该是sscanf
下面是产生的结果代码:使用preg_split()
工作示例
$string = "AAAAAAAAAA111111111111111";
$count = 1000000;
function prSplit($string) {
return preg_split('/([A-Za-z]+)/', $string, -1, PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY);
}
function sScanfTest($string) {
return sscanf($string, "%[A-Z]%[0-9]");
}
function microtime_float()
{
list($usec, $sec) = explode(" ", microtime());
return ((float)$usec + (float)$sec);
}
$startTime1 = microtime_float();
for($i=0; $i<$count; ++$i) {
prSplit($string);
}
$time1 = microtime_float() - $startTime1;
echo '1. preg_split took '.$time1.' seconds<br />';
$startTime2 = microtime_float();
for($i=0; $i<$count; ++$i) {
sScanfTest($string);
}
$time2 = microtime_float() - $startTime2;
echo '2. sscanf took '.$time2.' seconds';
它总是一组阿尔法,然后是数字。 Regex会比sscanf更好吗? – 2012-07-13 19:54:50
这里:
$strs = array('AA11', 'AAAAAA1111111', 'AA1111111');
foreach($strs as $str)
foreach(preg_split('/([A-Za-z]+)/', $str, -1, PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY) as $temp)
var_dump($temp);
这outputs:
string(2) "AA"
string(2) "11"
string(6) "AAAAAA"
string(7) "1111111"
string(2) "AA"
string(7) "1111111"
- 1. 分割字符串数组成字符
- 2. 分割字符串转换成字母
- 3. 将字符串分割成数字或字母字符与JavaScript
- 4. 分割字符串成组
- 5. 将字符串分割成单个字符字符串数组
- 6. 分割字符串与字母和字母组合分成Java数组中的空间
- 7. 使用||将字符串分割成Java字符串数组或|
- 8. 分割字符串转换成字符串和整数庆典
- 9. RandomStringGenerator生成字母数字字符串
- 10. 在Arduino中生成由数字和字母组成的字符串哈希
- 11. 分割字符串转换成其预定的组件在PHP
- 12. 的Javascript JSON字符串分割成
- 13. 最简单的方法来将字符串分割成键/值
- 14. 分割字符串转换成较小的字符串
- 15. 分割一个字符串转换成不同的字符串
- 16. 如何分割字符串成间隔
- 17. 将字符串分割成C++
- 18. 分割字符串成2 C#块
- 19. 将字符串分割成句子
- 20. 在java中将字符串分割成多个子字符串
- 21. 如何将字符串分别分成两个数字和字母列表?
- 22. 如何将字符串分割成数组作为整数
- 23. 将数组的每一行分割成一个字符串
- 24. php函数将字符串分隔成不同的字符串?
- 25. 分组串的第一个字符(字母和数字)
- 26. 分割和分组字符串
- 27. PHP字符串分割
- 28. PHP:分割字符串
- 29. PHP分割字符串
- 30. 分割字符串 - PHP
它看起来像'sscanf()'[只是更快一点](http://viper-7.com/svMSAI)比'preg_split()'。但是,差异可能可以忽略不计。 – nickb 2012-07-13 20:07:00
有一点需要注意,不要使用'%[AZ]%d',因为如果数字部分大于2147483647,结果会得到2147483647,例如:111111111111111您可以使用'%[AZ]%[0- 9]' – infinity 2012-07-13 20:29:59