EDIT: Я бы также необходим, если это возможно, чтобы иметь регулярное выражение соответствует формату строкаJava согласовань группа захват
[id='value1' or id='value2' or ... or id='valueN']
, а также захватить все значения.
У меня есть код, который не работает, как я ожидал, и я не уверен, где моя ошибка. В принципе у меня есть строка, как
[id='id1' or id='id2' or id='id3']
и мне нужно найти все значения, такие как id1
, id2
и id3
.
final String regex = "\\[id='([^']+)'(?:\\s*or\\s*id='([^']+)')*\\]";
final String text = "[id='id1' or id='id2' or id='id3']";
final Pattern pattern = Pattern.compile(regex);
final Matcher matcher = pattern.matcher(text);
Если я
while(matcher.find())
{
System.out.println(matcher.group(1));
}
я только получаю
id1
С
if (matcher.matches())
{
System.out.println("Groups count: " + matcher.groupCount());
for (int i = 1; i <= matcher.groupCount(); i++)
{
System.out.println(matcher.group(i));
}
}
Я получаю
id1
id3
Ожидаемый результат будет
id1
id2
id3
Ни выход ожидаемый один. Может ли кто-нибудь указать мне, является ли регулярное выражение неправильным или это связано с тем, что группа находила часть кода?
Привет и благодарю вас за ответ. Он работает, как вы упоминаете, но регулярное выражение не является достаточно ограничительным, чтобы соответствовать шаблону. Другие строки, такие как «[id = 'id1' и id = 'id2' и id = 'id3']", будут соответствовать регулярному выражению. Есть ли способ, чтобы и проверка, и захват имели только одно регулярное выражение? спасибо – user4132657