REGEX - 指定组、分组顺序
REGEX - specify groups, grouping order
当我这样写regex时:
/(.*)/(.*)
来自字符串
/aaa/bbb/ccc
我得到组:
#1 aaa/bbb
#2 ccc
但我希望它是这样的:
#1 aaa
#2 bbb/ccc
如何更改分组顺序?
基本上有两种方法可以实现:
- 惰性匹配 - 喜欢
/(.*?)/(.*)
.*
贪心匹配,所以第一个.*
先尽可能多的匹配(=字符串的提示),然后回溯,直到能匹配到正斜杠。惰性匹配以相反的方式工作,.*?
匹配尽可能少(= 无),然后扩展直到可以匹配斜杠。
- 负字符class匹配-喜欢
/([^/]*)/(.*)
正如我们所知,我们想要匹配正斜杠之前的所有内容,我们可以使用字符 class 将正斜杠取反,然后再次进行贪婪匹配。这样可以提高性能,因为您可以一步匹配,而不是通过惰性匹配扩展您的模式。
当我这样写regex时:
/(.*)/(.*)
来自字符串
/aaa/bbb/ccc
我得到组:
#1 aaa/bbb
#2 ccc
但我希望它是这样的:
#1 aaa
#2 bbb/ccc
如何更改分组顺序?
基本上有两种方法可以实现:
- 惰性匹配 - 喜欢
/(.*?)/(.*)
.*
贪心匹配,所以第一个.*
先尽可能多的匹配(=字符串的提示),然后回溯,直到能匹配到正斜杠。惰性匹配以相反的方式工作,.*?
匹配尽可能少(= 无),然后扩展直到可以匹配斜杠。
- 负字符class匹配-喜欢
/([^/]*)/(.*)
正如我们所知,我们想要匹配正斜杠之前的所有内容,我们可以使用字符 class 将正斜杠取反,然后再次进行贪婪匹配。这样可以提高性能,因为您可以一步匹配,而不是通过惰性匹配扩展您的模式。