Как захватить эту группу с кавычками? - PullRequest
0 голосов
/ 24 мая 2018
    String content = "$.test(\"I am do'in testing\") ";
    Matcher matcher = 
     Pattern.compile("\\$.test.*?(.*?[\"'](.*?)[\"'].*?)").matcher(content);

Вывод ("I am do', но мне нужно захватить I am do'in testing.Не уверен, что мне здесь не хватает?

Аналогичным образом ввод может быть "$ .test (\ 'I do do' в тестировании \ ')", вывод должен быть I am do'in testing

1 Ответ

0 голосов
/ 24 мая 2018
\$.test.*?(.*?["'](.*?)["'].*?)

Это ваше регулярное выражение.Это регулярное выражение использует ленивый квантификатор между ["'] и другим ["'].Это позволяет ему совпадать между " (двойная кавычка) и ' одинарная кавычка, когда вы вводите: $.test("I am do'in testing")

Следовательно, он совпадает и захватывает I am do в группе захвата # 1.

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

Вы можете использовать это регулярное выражение для сопоставления строки между одинарными или двойными кавычками, которые пропуск пропущенных кавычек с обратной косой чертой:

\$\.test[^'"]*(?:"([^"\\]*(?:\\.[^"\\]*)*)"|'((?:[^'\\]*(?:\\.[^'\\]*)*))').*

Демонстрация RegEx

Код:

final String regex = "\\$\\.test[^'\"]*(?:\"([^\"\\\\]*(?:\\\\.[^\"\\\\]*)*)\"|'((?:[^'\\\\]*(?:\\\\.[^'\\\\]*)*))').*";

final Pattern pattern = Pattern.compile(regex);
final Matcher matcher = pattern.matcher( input );

while (matcher.find()) {
    System.out.printf("Group-1: %s, Group-2: %s%n", matcher.group(1), matcher.group(2));
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...