abc([^\r\n]*) // 0 or more
abc([^\r\n]+)? // 1 or more, but it's optional
В Java. Они выглядят одинаково для меня.Любая разница между этими двумя регулярными выражениями?
abc([^\r\n]*) // 0 or more
abc([^\r\n]+)? // 1 or more, but it's optional
В Java. Они выглядят одинаково для меня.Любая разница между этими двумя регулярными выражениями?
Существует небольшая разница между ними. Следующий code
import java.util.regex.Pattern;
import java.util.regex.Matcher;
class Example
{
public static void main (String[] args)
{
String text = "abc";
Pattern p1 = Pattern.compile("abc([^\\r\\n]*)");
Matcher m1 = p1.matcher(text);
if (m1.find()) {
System.out.println("MatchCount: " + m1.groupCount());
System.out.println("Group 1: " + m1.group(1));
} else {
System.out.println("No match.");
}
Pattern p2 = Pattern.compile("abc([^\\r\\n]+)?");
Matcher m2 = p2.matcher(text);
if (m2.find()) {
System.out.println("MatchCount: " + m2.groupCount());
System.out.println("Group 1: " + m2.group(1));
} else {
System.out.println("No match.");
}
}
}
дает выход:
MatchCount: 1
Group 1:
MatchCount: 1
Group 1: null
Таким образом, в случае строки abc
первое регулярное выражение создает группа записи с пустым содержимым, а во второй группе пуст, и, таким образом, не соответствует. Хотя я не знаком с Java, я думаю, вам придется относиться к ним немного иначе.
Sidenote:
Java не поддерживает условную соответствия (в отличие от PCRE, .net, увеличить и некоторые другие) и условно замена (в отличие от Boost), где это будет иметь огромное значение. Ох и Дельфи имеет issues with optional named capturing groups.
Они выглядят одинаково для меня. –
В случае 'abc' первая будет хранить пустую строку для первой группы захвата, вторая не сохранит эту группу, однако я недостаточно знаком с java, чтобы узнать, что происходит, когда вы пытаетесь получить доступ к группе 1. Обратите внимание, что в других вариантах регулярных выражений, где поддерживается условное сопоставление (PCRE, Boost, .net и т. Д.) Или замена (Boost), это может иметь огромное значение. Ох и Delphi имеет проблемы с доступом к неподтвержденным группам захваченных групп. –
Ничего себе. Я просто должен был проверить его, и, наверное, я написал неправильный ответ. https://regex101.com/r/H6nkxD/1 показывает, что разные парсеры действительно ведут себя по-разному относительно группы '' '(...)?' '' – Art