Sublime Text正则表达式仅在未转义时才起作用

时间:2017-07-19 04:52:01

标签: regex sublimetext3 sublimetext regex-lookarounds

在崇高的文本3中,为什么这匹配3个条目

\$http\.post\('\/((?!view|list).)[^\']*'

但这不匹配

\$http\.post\('\/((?!view|list).)[^\']*\'

在以下数据集上。

$http.post('/listSets' ,$scope.updateAccessKey({type: 2}), {
$http.post('/viewedMessage' , viewedMessagePayload, {
$http.post('/listRelatedContent' , 
$http.post('/viewedSet' , payLoad , {
$http.post('/viewDiscussion' , payLoad , {
$http.post('/editMessage' , $scope.updateAccessKey(payLoad), {
$http.post('/addComment' , $scope.updateAccessKey(payLoad), {
$http.post('/createStudySet' , createSetP

我知道转义撇号是可选的,但为什么它会破坏Sublime Text正则表达式搜索?

1 个答案:

答案 0 :(得分:4)

根据documentation on Search and Replace,内部Sublime使用Boost PCRE引擎为搜索面板中的正则表达式提供支持,根据Boost Regex documentation,构造\'与{{1}同义。并且仅在缓冲区的末尾匹配。

因此,以\z结尾的正则表达式版本与任何内容都不匹配,因为根据定义,它只匹配看起来像\'行的内容,该行出现在文件的最后一行并且使用仍未终止的URL字符串结束文件。

由于正则表达式中$http.post之前的*,它将匹配此行后面的任何数量的文本,只要它不包含单引号(到期)排除在角色类中。)

例如,给定以下输入,您的正则表达式将匹配最后一个\',包括其后的所有内容,直到缓冲区的末尾。

$http.post