2016-04-07 47 views
1

我想在该行的开头匹配的白色空间,但只有下一个词是PATCH,PUT,POST如何匹配的行空格开始或GET只有当一个特定的词后

edit_user_registration GET  /users/edit(.:format)  registrations#edit 
          PATCH /users(.:format)   registrations#update 

在上面的情况下只有第二行白色空格。我尝试这样做:

(^\s*)+(POST|GET|DELETE|PUT|PATCH|OPTIONS) 

问题是这将匹配即使是“打补丁”字,但要“补丁”之前只有空白匹配。

回答

2

您可以使用,而不是一个前瞻:

^\s*(?=(?:POST|GET|DELETE|PUT|PATCH|OPTIONS)\b) 

the regex demo

最后\b,使模式匹配单词只作为整个单词。如果这不是你所需要的,你可以删除它。

积极的超前检查只是检查模式是否匹配文本并返回true或false,或者失败或传递,而不消耗字符。

另外,(\s*)+一个或多个零个或多个空格符号)可缩短至仅仅\s*0+空格符号)。

+0

@Tushar:我相信在这种情况下这不是必要的,但我总是更喜欢安全。 –

+0

适用\ b或不适用。 –

+1

不应该将'\ b'放在预见范围内吗? –

0

您可以使用此:

^\s*(?=POST|GET|DELETE|PUT|PATCH|OPTIONS) 

试试吧here

该正则表达式将匹配由匹配的动词开始的行上的空字符串。如果你不希望这种行为,改变*+

^\s+(?=POST|GET|DELETE|PUT|PATCH|OPTIONS) 
相关问题