2016-01-23 47 views
0

我需要一个正则表达式,它应该用空格解析字符串,并且如果在以引号(单/双)结尾的字符串中存在空格,则不应该解析它。需要Java正则表达式

abc cde 'efg hij'k lmn'opq rst' 'ijk lmn' u'v'w xyz 'abc' \'\\\\\' \'_Notes.txt\' 

要求O/P:

abc 
cde 
'efg hij'k 
lmn'opq rst' 
'ijk lmn' 
u'v'w 
xyz 
'abc' 
\'\\\\\' 
\'_Notes.txt\' 

我用下面的方式对我的要求,但这种分析像下面

Pattern p = Pattern.compile("[^\\s\"']+|\"([^\"]*)\"|'([^']*)'"); 

O/P:

abc 
cde 
'efg hij'   //here k is missing 
lmn'opq 
rst' 
'ijk lmn' 
u'v'w 
xyz 
'abc' 
'\\' //here original string is \'\\\\\' 
'_Notes.txt' //here origina string \'_Notes.txt\' 

回答

1

它看起来你只需要让你的正则表达式找到您描述的一个或多个子模式。因此,与

Pattern p = Pattern.compile("([^\\s\"']+|\"([^\"]*)\"|'([^']*)')+"); 
//       ^---------------------------------^^- add this 

DEMO

+0

这除了特殊字符,然后斜线几乎工作尝试,O /你的模式P的(请查看最后两个单词 ABC CDE “EFG hij'k LMN 'OPQ RST' 'IJK LMN' u'v'w XYZ 'ABC' '\\' //这里我需要原词\ '\\\\\' '_Notes.txt' //这里我需要\'_ Notes.txt \' 非常感谢您的帮助! – Raj

+0

为了更好地帮助您,我需要更多信息,因为现在我不确定我是否了解您的情况。你解析的文本来自哪里?它是来自像字符串文字一样的''ab \\ cd“'或者可能包含'ab \ cd'的文本文件之类的其他源文件(注意,文字表示与存储在文件中的文本相同的文本,因为''''是特殊的在字符串文字中,并且需要额外的转义)。如果我创建表示文本的字符串文字,如'String text =“abc cde'efg hij'k lmn'opq rst''ijk lmn'u'v'w xyz'abc'\\'\\\\\\\\\\\\\ \\'\\'_ Notes.txt \\'“;'我得到'\'\\\\'' – Pshemo

+0

这是从后端获取的sql文本,无论发生了什么特殊字符,都需要使用斜杠进行填充以执行sql w/o错误 所以我解析SQL然后格式化文件中的文本。我的意图是从保存的文件执行SQL W/O修改 – Raj