正则表达式匹配匹配的空间?

时间:2016-02-18 04:25:53

标签: regex

我不是regex(或SO)的新手,但我似乎无法找到匹配匹配之间剩余空间的可靠解决方案。

例如,我想知道内部引号是什么,什么不引用,并且两者都做了。

获取报价很简单:(\".+?\"|'.+?') = quoteMatch

但是让另一个匹配组选择其他所有内容不是。

我最接近的是quoteMatch+'|(.)'。这会将我的引用组与其他所有组分开,但它不会将“其他组”组合在一起。

尝试quoteMatch+'|(.+)'一起选择所有内容,quoteMatch+'|(.+?)'让我退步。

我想我需要找到一种方法让第一场比赛比第二场比赛更贪婪,但我做的任何事情都让它变得贪婪,这使得它开始接管多个引号和中间的东西(即.matse = {{1 }}

我也研究过使用split函数,但是它没有返回分割的内容,并且不像我想象的那样有效地解决了这个问题。

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

将用于选择其他角色的匹配移动到捕获组内部作为替换:

(\".+?\"|'.+?'|.+?(?=["']|$))

然后你可以使用(?=["']|$)之类的积极前瞻来匹配,直到引用或行尾。

Live Example

这样做,输入:

  

之前在引号“quote2”之间引用“quote1”之前引用

会回来:

(before quotes ), ("quote1"), ( in between quotes ), ("quote2"), ( after quotes)

作为旁注,您还可以通过使用反向引用来结合前两个替换来关闭引用:

((['"]).+?\2|.+?(?=["']|$))