#mysql #sql #regex
Вопрос:
Я пытался обучить себя MySQL, и мне было интересно, может ли кто-нибудь объяснить разницу между использованием метасимволов регулярных выражений » * «и»?». Книга, которую я использую, описывает их как «совпадающие (0) или один экземпляр строк, предшествующих ему». Я попытался использовать оба, ища одно и то же в созданной мной практической таблице, и получил точно такой же результат, поэтому, если один из операторов должен быть жадным, а другой-нет, похоже, что это не всегда так с каждой таблицей.
Редактировать 1: Я включаю скриншот вывода, который я получил от»*», который показывает, что он соответствует утверждению формы «ax*» только a.
Правка 2: regex101.com не перечисляет MySQL как «аромат», и когда я пытаюсь сделать «al*» для Александры там, он говорит, что не соответствует ни одному из ароматов. Является ли тот факт, что MySQL Workbench возвращает Alexandra в качестве одного из выходных данных, чем-то специфичным для MySQL, что не относится ни к одному из этих других языков?
Комментарии:
1. Пришло время оставить эту книгу и попробовать regex101.com для регулярных выражений. У них есть объяснение написанного регулярного выражения и описание значений каждой части
2. Выражение
"al*"
будет соответствовать чему угодно со строчной буквой «а», что и показывает ваш вывод. Это"*"
относится только кl
.3. @TimRoberts Теперь я вижу! Итак, это не сопоставление с «Ал» в начале «Александра», это сопоставление с «а» в конце!
Ответ №1:
Они не совсем одно и то же. "*"
означает «0 или более». "?"
означает «0 или 1», например «необязательно». Итак, учитывая «ax*b» и «ax?b»:
- Ни один из них не будет соответствовать «а».
- Оба будут соответствовать «ab».
- Оба будут соответствовать «axb».
- Только первый будет соответствовать «axxb» или «axxxxxxb».
Комментарии:
1. так это была опечатка? Кроме того, похоже, что из вывода, который я получил, оба также будут соответствовать только «а». Я просмотрел список имен и поискал имена с «Ал*» и » Ал?». Оба дали мне имена только с буквами » А «и без букв» л «в дополнение к именам как с» Ал » в этом порядке, так и в обратном порядке.
2. Если в книге говорится
"*"
, что соответствует 0 или одному экземпляру, то это неправильно. И регулярное"ax*b"
выражение не будет соответствовать единственной строке «a».3. Если вы хотите поиграть с этим, попробуйте такой веб-сайт, как regex101.com . Вы вводите свое выражение плюс некоторый пример текста, и он показывает вам результат. (Как уже предположил @astentx, я вижу.)
4. в Python я бы с вами согласился. Но я обнаружил, что это действительно произошло в MySQL. Я не знаю, есть ли что-то особенное в MySQL, что позволяет этому произойти.
5. Вы используете «rlike»? Это должно потребовать соответствия для всего шаблона. Если у вас есть пример, вы можете добавить его к своему вопросу.