2016-01-23 48 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