#java #regex
#java #регулярное выражение
Вопрос:
Я новичок в регулярных выражениях и хочу найти строку между двумя символами,
Я пробовал ниже, но оно всегда возвращает false. Могу я узнать, что с этим не так?
public static void main(String[] args) {
String input = "myFunction(hello ,world, test)";
String patternString = "\(([^]] )\)";
Pattern pattern = Pattern.compile(patternString);
Matcher matcher = pattern.matcher(input);
while (matcher.find()) {
System.out.println(matcher.group());
}
}
Ввод:
myFunction(hello,world,test)
где myFunction может содержать любые символы. перед запуском (могут быть любые символы.
Вывод:
hello
world
test
Комментарии:
1. пожалуйста, обновите свой требуемый вывод
Ответ №1:
Вы могли бы сопоставить, используя G
привязку, которая утверждает позицию в конце предыдущего сопоставления и фиксирует ваши значения в группе:
(?:bmyFunction(|G(?!^))([^,] )(?:h*,h*)?(?=[^)]*))
В Java:
String regex = "(?:\bmyFunction\(|\G(?!^))([^,] )(?:\h*,\h*)?(?=[^)]*\))";
Объяснение
(?:
Группа без захватаbmyFunction(
Граница слова, чтобы совпадение не было частью более крупного слова, сопоставьте myFunction и открывающие круглые скобки(
|
ИлиG(?!^)
Укажите позицию в конце предыдущего соответствия, а не в начале строки
)
Закрыть группу без захвата([^,] )
Запись в группу, совпадающую 1 раз без запятой(?:h*,h*)?
Необязательно сопоставлять запятую, окруженную 0 горизонтальными символами-пробелами(?=[^)]*))
Позитивный взгляд, утверждайте, что справа находится закрывающая скобка)
Демонстрация регулярного выражения | Демонстрация Java
Например:
String patternString = "(?:\bmyFunction\(|\G(?!^))([^,] )(?:\h*,\h*)?(?=[^)]*\))";
String input = "myFunction(hello ,world, test)";
Pattern pattern = Pattern.compile(patternString);
Matcher matcher = pattern.matcher(input);
while (matcher.find()) {
System.out.println(matcher.group(1));
}
Результат
hello
world
test
Ответ №2:
Я бы посоветовал вам достичь этого в двухэтапном процессе:
Шаг 1: захватите все содержимое между (
и )
Используйте регулярное выражение: ^S ((.*))$
Первая и единственная группа захвата будет содержать требуемый текст.
Шаг 2: Разделите захваченную строку выше на ,
, таким образом, получая все параметры, разделенные запятыми, независимо.
Ответ №3:
Увидев это, вы можете получить представление
([w] ),([w] ),([w] )
ДЕМОНСТРАЦИЯ: https://rubular.com/r/9HDIwBTacxTy2O