实用正则表达式技巧指南
1. 回溯问题与路径解析
在正则表达式匹配过程中,回溯是一个常见的现象。例如,当尝试匹配一个路径时,正则表达式可能会进行多次回溯才能最终匹配成功。考虑从 ...local/... 开始的尝试,一旦 [^/]+ 匹配到第二个 l 并在斜杠处失败, $ 会针对保存的每个 l 、 a 、 c 、 o 、 l 状态进行尝试(并失败)。如果还不够,从 ...local/... 开始的尝试会重复大部分过程,然后是 ...local/... 等等。不过,在文件名通常较短的情况下,这种回溯问题不必过于担忧(40 次回溯不算什么,4000 万次回溯才真正需要关注)。
接下来,我们要将完整路径拆分为前导路径和文件名部分。有多种方法可以实现这一目标,以下是具体分析:
- 初始方法 :可以使用 ^(.+)/(.+)$ 来将所需部分填充到 $1 和 $2 中。这个正则表达式看似平衡,但由于贪婪匹配的特性,第一个 .+ 会尽可能多地匹配,直到为了匹配后面的斜杠而进行回溯,从而将回溯部分留给后面的 .+ 。因此, $1 是完整的前导路径, $2
超级会员免费看
订阅专栏 解锁全文
10万+

被折叠的 条评论
为什么被折叠?



