REGEX - 指定组、分组顺序

REGEX - specify groups, grouping order

当我这样写regex时:

/(.*)/(.*)

来自字符串

/aaa/bbb/ccc

我得到组:

#1  aaa/bbb
#2  ccc

但我希望它是这样的:

#1  aaa
#2  bbb/ccc

如何更改分组顺序?

基本上有两种方法可以实现:

  1. 惰性匹配 - 喜欢 /(.*?)/(.*)

.*贪心匹配,所以第一个.*先尽可能多的匹配(=字符串的提示),然后回溯,直到能匹配到正斜杠。惰性匹配以相反的方式工作,.*? 匹配尽可能少(= 无),然后扩展直到可以匹配斜杠。

  1. 负字符class匹配-喜欢/([^/]*)/(.*)

正如我们所知,我们想要匹配正斜杠之前的所有内容,我们可以使用字符 class 将正斜杠取反,然后再次进行贪婪匹配。这样可以提高性能,因为您可以一步匹配,而不是通过惰性匹配扩展您的模式。