【发布时间】:2016-11-20 10:43:44
【问题描述】:
当我按如下方式编写正则表达式时:
/(.*)/(.*)
从字符串
/aaa/bbb/ccc
我得到了组:
#1 aaa/bbb
#2 ccc
但我希望它是这样的:
#1 aaa
#2 bbb/ccc
如何更改分组顺序?
【问题讨论】:
标签: regex backreference regex-group
当我按如下方式编写正则表达式时:
/(.*)/(.*)
从字符串
/aaa/bbb/ccc
我得到了组:
#1 aaa/bbb
#2 ccc
但我希望它是这样的:
#1 aaa
#2 bbb/ccc
如何更改分组顺序?
【问题讨论】:
标签: regex backreference regex-group
基本上有两种方法可以实现:
/(.*?)/(.*)
.* 匹配贪心,所以第一个.* 首先尽可能匹配(= 字符串的提示),然后回溯直到可以匹配到正斜杠。惰性匹配则相反,.*? 匹配尽可能少(= 无),然后扩展直到可以匹配斜线。
/([^/]*)/(.*)
我们知道,我们想要匹配正斜杠之前的所有内容,我们可以使用一个字符类,其中正斜杠被否定,然后再次匹配贪婪。这更高效,因为您可以一步匹配,而不是使用惰性匹配扩展您的模式。
【讨论】: