Java регулярное выражение разделяется на пробел, не предшествует или сопровождается одинарные или двойные кавычки - PullRequest
0 голосов
/ 03 апреля 2012

Я не могу заставить это работать ..

У меня есть строка, которую я хочу разделить на пробелы. Однако я не хочу разбивать строки. То есть текст внутри двойных или одинарных кавычек.

Пример

Разбить следующую строку:

private String words = " Hello, today is nice " ;

.. должен выдать следующие токены:

 private
 String
 words
 =
 " Hello, today is nice "
 ;

Какое регулярное выражение я могу использовать для этого?

Ответы [ 2 ]

0 голосов
/ 03 апреля 2012

Вы пробовали это?

((['"]).*?\2|\S+)

Вот что он делает:

(         <= Group everything
  (['"])  <= Find a simple or double quote
  .*?     <= Capture everything after the quote (ungreedy)
  \2      <= Find the simple or double quote (same as we had before)
  |       <= Or
  \S+     <= Non space characters (one at least)
)

С другой стороны, если вы хотите создать парсер, сделайте парсер и не используйте регулярные выражения.

0 голосов
/ 03 апреля 2012

Регулярное выражение ([^ "]*)|("[^"]*") должно соответствовать всем токенам. Опираясь на мои ограниченные знания Java и http://www.regular -expressions.info / java.html , вы сможете сделать что-то вроде этого:

// Please excuse any syntax errors, I'm used to C#
Pattern pattern = Pattern.compile("([^ \"]*)|(\"[^\"]*\")");
Matcher matcher = pattern.matcher(theString);
while (matcher.find())
{
    // do something with matcher.group();
}
...