Как написать одно регулярное выражение для удовлетворения всех случаев и вывести указанную переменную - PullRequest
0 голосов
/ 11 января 2019

Я хотел бы найти некоторые утверждения в файле. И мне нужно распечатать имя элемента и подэлемента. Утверждение типа

set element elemName subElem sumElemName

Если имя элемента или подэлемента содержит один или несколько пробелов, вся строка должна быть заключена в двойные кавычки. Двойные кавычки не нужны, если в имени элемента или подэлемента нет пробела Таким образом, следующие утверждения действительны.

set element "aaa bbb" subElem "ccc"
set element "aaa bbb" subElem ccc
set element "aaa" subElem "ccc"

Я пытался написать два выражения для удовлетворения некоторых случаев. Но как написать одно регулярное выражение для удовлетворения всех случаев?

String regex = "^\\s*set\\s+element\\s+\"(.*)\"\\s+subElem\\s+\"(.*)\"\\s*$";
String regex = "^\\s*set\\s+element\\s+(?<!\")(\\S+)\\s+subElem\\s+(?<!\")(\\S+)\\s*$";

1 Ответ

0 голосов
/ 11 января 2019

Вы можете сопоставить подстроки внутри двойных кавычек или чанка непробельных символов как elemNames:

String regex = "^\\s*set\\s+element\\s+(\"[^\"]*\"|\\S+)\\s+subElem\\s+(\"[^\"]*\"|\\S+)\\s*$";

См. Демоверсию regex

Шаблон (\"[^\"]*\"|\S+) соответствует

  • \"[^\"]*\" - a ", затем любые 0+ символов кроме " и затем "
  • | - или
  • \S+ - 1+ непробельных символов.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...