lyn*_*ynn 18 php regex string performance
我正在编写PHP代码来解析字符串.它需要尽可能快,正则表达式是如何去的?我有一种预感,PHP字符串函数更昂贵,但它只是猜测.真相是什么?
这是我需要对字符串做的具体操作:
抓住前半部分(基于子串"000000"的第三个位置)并将其散列与接下来的20个字节进行比较,丢弃任何剩余的东西.
将第9个字节解析为下一个"000000"作为一个数据.然后在之后抓取接下来的19个字节,并将其分成8(折腾1)和8.然后我做一些其他的东西,将这两个8字节的字符串转换为日期.
所以这就是我需要做的事情.
nic*_*ckf 16
这取决于你的情况:如果你正在尝试做一些相当基本的事情(例如:搜索一个字符串,用其他东西替换一个子字符串),那么常规字符串函数就是这样.如果你想做一些更复杂的事情(例如:搜索IP地址),那么正则表达式函数肯定是更好的选择.
我没有描述正则表达式,所以我不能说它们在运行时会更快,但我可以告诉你,使用基本函数将相当于时间花在一起的额外时间是不值得的.
使用OP中的新信息进行编辑:
听起来好像你真的需要在这里做一些小的字符串操作.由于每一个都是非常基本的,我怀疑你能够使用正则表达式一次完成所有这些步骤(甚至几个步骤),我会使用基本功能:
抓住前半部分(基于子串"000000"的第三个位置)并将其散列与接下来的20个字节进行比较,丢弃任何剩余的东西.
使用:strpos()
和
:substr()
/$(.*?0{6}.*?0{6}.*?)0{6}/
然后在那之后抓取接下来的19个字节,并将其分成8(折腾1)和8.
使用:substr()
- (我假设你的意思是17字节 - 8 + 1 + 8)
$part1 = substr($myStr, $currPos, 8);
$part2 = substr($myStr, $currPos + 9, 8);
Run Code Online (Sandbox Code Playgroud)
我相信有一个阈值,正则表达式比一堆PHP字符串函数调用更快.无论如何,取决于你正在做什么.你必须找出平衡点.
现在你编辑了你的问题.我会使用字符串函数来完成你想要完成的任务.strpos()和substr()是第一眼看到的.
我认为如果你想要最高性能,你应该避免使用正则表达式,因为它有助于最小化工作量,但不会有最好的性能,因为你几乎总能使用字符串例程调整代码来解决特定问题并获得性能提升.但是对于无法进行优化的简单解析例程,您仍然可以使用正则表达式,因为它不会在那里产生很大的不同.
编辑:对于你发布的这个特定问题,我赞成字符串操作,但只是因为我不知道如何在正则表达式中做到这一点.这似乎是非常简单的,除了哈希,所以我认为正则表达式/字符串函数不会产生很大的不同.
归档时间: |
|
查看次数: |
9353 次 |
最近记录: |