如果有些字符两个字符串都不包含,例如,\0
您可以这样写
"$first\0$second" =~ m/^(.*).*\0\1/s;
并且最长的公共前缀将另存为$1
。
这显然是非常低效的。我认为,如果要关注效率,那么这根本不是我们应该使用的方法。但我们至少可以通过改变改进.*
,以[^\0]*
防止无用的贪念,将只需要再次回溯,和包装第二[^\0]*
在(?>…)
防止回溯那也没有办法。这个:
"$first\0$second" =~ m/^([^\0]*)(?>[^\0]*)\0\1/s;
这将产生相同的结果,但效率更高。(但仍然不是近 作为 有效作为一个简单的非正则表达式为基础的方法。如果字符串都有长度 ñ ,我预计其最坏的情况下至少需要O( ñ 2)时间,而直接的非regex-基础的方法将采取O( ñ 的)时间 的 最坏的情况。)