我有这个正则表达式:
"([^"\\]|\\.)*"|(\S+)
但问题是,当我有一个像"foo"
这样的输入并且我使用匹配器来浏览组时,它找到的第一个组是"foo"
,当我希望它是{{1}时}}。我做错了什么?
编辑:
我正在使用Java,我只是修复了它
foo
第一个捕获组不包括整个字符串"((?:[^"\\]|\\.)*)"|(\S+)
。我将它封装在一个捕获组中,并使内部存在的组成为非捕获组。
编辑:其实没有...它在在线正则表达式调试器中工作但在我的程序中没有...
答案 0 :(得分:1)
捕获双引号文字模式(分支1)的内容,如果匹配则抓住它。
另外,请考虑展开模式:
"([^"\\]*(?:\\.[^\\"]*)*)"|(\S+)
在Java中:
String pat = "\"([^\"\\\\]*(?:\\\\.[^\\\\\"]*)*)\"|(\\S+)";
请注意,像(A|B)*
这样的模式经常会导致Java中的堆栈溢出问题,这就是首选展开版本的原因。