我不是regex(或SO)的新手,但我似乎无法找到匹配匹配之间剩余空间的可靠解决方案。
例如,我想知道内部引号是什么,什么不引用,并且两者都做了。
获取报价很简单:(\".+?\"|'.+?') = quoteMatch
但是让另一个匹配组选择其他所有内容不是。
我最接近的是quoteMatch+'|(.)'
。这会将我的引用组与其他所有组分开,但它不会将“其他组”组合在一起。
尝试quoteMatch+'|(.+)'
一起选择所有内容,quoteMatch+'|(.+?)'
让我退步。
我想我需要找到一种方法让第一场比赛比第二场比赛更贪婪,但我做的任何事情都让它变得贪婪,这使得它开始接管多个引号和中间的东西(即.matse = {{1 }}
我也研究过使用split函数,但是它没有返回分割的内容,并且不像我想象的那样有效地解决了这个问题。
感谢您的帮助。
答案 0 :(得分:1)
将用于选择其他角色的匹配移动到捕获组内部作为替换:
(\".+?\"|'.+?'|.+?(?=["']|$))
然后你可以使用(?=["']|$)
之类的积极前瞻来匹配,直到引用或行尾。
这样做,输入:
之前在引号“quote2”之间引用“quote1”之前引用
会回来:
(before quotes ), ("quote1"), ( in between quotes ), ("quote2"), ( after quotes)
作为旁注,您还可以通过使用反向引用来结合前两个替换来关闭引用:
((['"]).+?\2|.+?(?=["']|$))