#java #регулярные_выражения #split
Дается строка, которую нужно распарсить на составные части String line = "param1 param2 'param3 param3 param3' param4"; String[] params = line.split("Регулярное выражение"); На выходе params должен разбиваться по пробелу и по 'тексту в кавычках': То есть: param1 param2 param3 param3 param3 param4 Я не могу составить подобное регулярное выражение, прошу помочь. Вот мой вариант, но он не работает так как нужно: String[] params = line.split("[\\s(^'.'$)]");
Ответы
Ответ 1
Еще вариант: String line = "param1 param2 'param3 param3 param3' param4"; System.out.println(Arrays.asList(line.replaceAll("\'", "").split("'?(\\s|$)(?=(([^']*'){2})*[^']*$)'?"))); // [param1, param2, param3 param3 param3, param4] С использованием apache-commons-lang StrTokenizer tokenizer = new StrTokenizer(line, ' ', '\''); while(tokenizer.hasNext()) { System.out.println(tokenizer.nextToken()); } // param1 // param2 // param3 param3 param3 // param4 Последний вариант (честно стырено отсюда): ArrayListlist = new ArrayList (); Matcher m = Pattern.compile("((?<=')[^']*(?='(\\s|$)+)|(?<=\\s|^)[^\\s']*(?=\\s|$))").matcher(line); while ( m.find() ) { list.add(m.group(1)); } System.out.println(list); // [param1, param2, param3 param3 param3, param4] Ответ 2
Попробуйте такой код: String line = "param1 param2 'param3 param3 param3' param4"; ArrayListlist = new ArrayList (); Matcher m = Pattern.compile("([^\']\\S*|\'.+?\')\\s*").matcher(line); while (m.find()) list.add(m.group(1).replaceAll("'", "")); System.out.println(list); В итоге получится: [param1, param2, param3 param3 param3, param4] Смотрим группу без кавычек [^\']\\S* или группу с кавычками \'.+?\'.
Комментариев нет:
Отправить комментарий