Regex 要基于拆分的正则表达式/
我有一根像Regex 要基于拆分的正则表达式/,regex,Regex,我有一根像 abc123/xyz456/abc/123/aaa/zzz 我想把它分成两份 abc123, xyz456 and abc/123/aaa/zzz 基本上,我希望将前两个项目拆分为单独的项目,其余的项目可以合并 我尝试了regex^(.*)\/(.*)\/(.*)$但是它给了我另一种方法,比如zzz,aaa和abc123/xyz456/abc/123 有没有办法从左到右而不是从右到左解析?或者任何建议都会很有帮助最简单的修复方法是将前两个*修改为*?以使前两个*延迟(即,匹配
abc123/xyz456/abc/123/aaa/zzz
我想把它分成两份
abc123, xyz456 and abc/123/aaa/zzz
基本上,我希望将前两个项目拆分为单独的项目,其余的项目可以合并
我尝试了regex^(.*)\/(.*)\/(.*)$
但是它给了我另一种方法,比如zzz
,aaa
和abc123/xyz456/abc/123
有没有办法从左到右而不是从右到左解析?或者任何建议都会很有帮助最简单的修复方法是将前两个
*
修改为*?
以使前两个*
延迟(即,匹配后续子模式的第一次出现):
见
否则,使用与任何字符匹配但不匹配的否定字符类[^\/]
:
^([^\/]*)\/([^\/]*)\/(.*)$
看
请注意,*
量词匹配量化子模式的零次或多次出现,如果需要至少匹配一次,则需要将其替换为+
(一次或多次出现)
请注意,最后一个*
可以保持原有的贪婪模式,因为它位于模式末尾,并且将匹配尽可能多的字符(换行字符除外),直到字符串末尾。将其转到*?
(即*?$
)没有意义,因为它会减慢匹配速度。请尝试以下操作:
^([^\/]+)\/([^\/]+)\/(.*)$
谢谢你的解释。我还有一个问题需要我自己去理解,那就是什么才是最重要的?在第一个例子中,你在这里做什么?
*
量词的惰性版本。*?
匹配后续子模式的第一次出现。如果*
获取整个字符串,然后回溯以容纳后续子模式的文本,则首先跳过延迟模式,然后首先尝试所有后续子模式。如果失败,将扩展延迟量化模式,即如果可以,匹配一个字符,然后再次尝试后续子模式。看,谢谢你,威克托。谢谢你!
^([^\/]+)\/([^\/]+)\/(.*)$