Разница между шаблоном соответствия и компьютерным равенством

1

В регулярном выражении (Groovy) было сказано, что оператор "== ~" аналогичен оператору "==", но соответствует шаблону вместо "вычисления равенства". Не могли бы вы помочь мне понять реальную разницу между этими двумя с помощью небольшой пример?

  • 0
    обратите внимание, что рассматриваемый оператор ==~ а не == ~ , что подразумевает другой сгенерированный код.
Теги:
groovy

2 ответа

1
Лучший ответ

x==y является коротким для x.equals(y) или x.compareTo(y) - см. перегрузку оператора Groovy (где в java это в основном сравнивает идентификатор объекта).

Оператор ==~ - специально разработанный оператор сравнения, который поможет вам выполнить полное совпадение шаблона с строкой.

Сгенерированный код для оператора (например, разрыв кода 'xxx' ==~/xx?/):

ScriptBytecodeAdapter.matchRegex("xxx", "xx?")

Из Groovy Regular Espressions:

Поскольку Matcher приводит к логическому вызову, вызывая его метод find, оператор = ~ согласуется с простым использованием оператора Perl = ~, когда он появляется как предикат (в 'if', 'while' и т.д.). Оператор "более строгий" == ~ требует точного совпадения всей строки предмета. Он возвращает логический, а не контрольный.

0

"картофель" == "картофель" на самом деле:

boolean result = ("potatoe"=="potatoe") //Compare Strings (GStrings in groovy)

"картофель" == ~ "картофель. *" означает:

Pattern p = Pattern.compile("potat.*");
Matcher m = p.matcher("potatoe");
boolean result = m.matches();

В первом примере, если вы сравните "картофель" с "картофелем. *", Результат будет ложным, потому что эти две строки не равны. Второй пример использует сопоставление, поэтому "potat. *" Больше не является простой строкой, но регулярное выражение и результат будут истинными.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню