当我不想要它时,正则表达式组匹配引号

时间:2016-08-24 05:03:44

标签: regex

我有这个正则表达式:

"([^"\\]|\\.)*"|(\S+)

Regular expression visualization

Debuggex Demo

但问题是,当我有一个像"foo"这样的输入并且我使用匹配器来浏览组时,它找到的第一个组是"foo",当我希望它是{{1}时}}。我做错了什么?

编辑:

我正在使用Java,我只是修复了它

foo

Regular expression visualization

Debuggex Demo

第一个捕获组不包括整个字符串"((?:[^"\\]|\\.)*)"|(\S+) 。我将它封装在一个捕获组中,并使内部存在的组成为非捕获组。

编辑:其实没有...它在在线正则表达式调试器中工作但在我的程序中没有...

1 个答案:

答案 0 :(得分:1)

捕获双引号文字模式(分支1)的内容,如果匹配则抓住它。

另外,请考虑展开模式:

 "([^"\\]*(?:\\.[^\\"]*)*)"|(\S+)

在Java中:

String pat = "\"([^\"\\\\]*(?:\\\\.[^\\\\\"]*)*)\"|(\\S+)";

请注意,像(A|B)*这样的模式经常会导致Java中的堆栈溢出问题,这就是首选展开版本的原因。