2016-01-23 3 views
0

Мне нужно регулярное выражение, которое должно анализировать строку с пробелом и если в строке есть пробел, который заканчивается кавычками (single/double), тогда он не должен анализировать.Нужно регулярное выражение 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

It похоже, вам просто нужно позволить вашему регулярному выражению найти e или более описанных ниже шаблонов. Так что попробуйте с

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

DEMO

+0

Это почти работает, за исключением специальных символов с последующим слэшем, O/P вашего шаблон (пожалуйста, проверьте последние два слова аЬс CDE «EFG hij'k ЛМН 'OPQ первого' 'IJK LMN' u'v'w хуг 'а' '\\' // здесь мне нужно оригинальное слово \ '\\\\\' '_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 error Итак, разберите sql, а затем создайте текст в файле. Мое намерение состоит в том, чтобы выполнить sql без изменений из сохраненного файла. – Raj

Смежные вопросы