为什么同时使用str_replace()和preg_replace()?

Mat*_*iva 3 php regex string algorithm performance

我在Perl之后认识了PHP,所以当我第一次找到preg_*函数时,我基本上只使用了那些.后来我读到str_replace()在处理文字文本时更快.所以我的问题是,不能preg_replace()str_replace()搜索模式不使用特殊字符那样有效吗?也许只是分析模式,在正则表达式和纯文本算法之间进行选择?

Ala*_*orm 7

理论上是的,你是对的.PHP团队可能会跳过preg_replace分析传入的模式,然后使用代码,str_replace如果它没有看到任何元字符.假设分析不太重,这可能会产生更好的性能结果.

但是,PHP源代码(即用于实现PHP的代码)的组织方式并不适合这种共享.PHP(在某些方面)不是一种完整的语言,而是更多的模块集合.

因此,最初PHP小组选择远离这种交叉模块授粉.此时,更改preg_replace功能以进行此类分析可能会破坏大量代码,并且性能改进将是微不足道的.

最后,分析本身是一个比你想象的更难解决的问题.告诉我,这种模式

 '/123/'
Run Code Online (Sandbox Code Playgroud)

意思是我应该搜索文字文本

123
Run Code Online (Sandbox Code Playgroud)

或文字文本

/123/
Run Code Online (Sandbox Code Playgroud)

对于任何一种解释都很容易提出令人信服的论据,这引起了对使用该函数的额外混淆.

理论上一个有趣的想法,但在实践和PHP世界的上下文中,它产生的问题远远多于它解决的问题.


Mic*_*rdt 5

也许只是分析模式,在正则表达式和纯文本算法之间进行选择?

每次我只想替换一些子串时,我宁愿不被强制转义正则表达式中具有特殊含义的所有东西.