Могу ли я получить пример того, как эти три элемента (они называются метасимволами?) Отличаются?
Я знаю, что это *
означает все или ничего, но я не уверен, что это правильный способ думать об этом. С другой стороны .
и ?
похоже тоже самое. Они соответствуют одному персонажу, верно?
Ответы:
Взято прямо из Википедии :
Большая разница в том, что звездочка соответствует нулю или большему количеству вхождений, а вопросительный знак соответствует нулю или одному вхождению. Сравните эти два примера:
Поскольку в
colouur
письме u (предыдущий элемент перед классификатором?
) встречалось более одного раза, оно не соответствует?
, но соответствует*
Подобный пример:
Из той же страницы википедии:
В нашем примере
Соответственно, последний читается как
match any line that has "colou", plus any character, plus letter "r"
Вывод
Вы спросили: «Я знаю, что« * »означает все или ничего, но я не уверен, что это правильный способ думать об этом. С другой». & '?' кажись же. " Как видите, точка и звездочка не совсем совпадают. Точка работает с любым символом, который может занимать эту конкретную позицию, а знак вопроса - с предыдущим элементом.
источник
Вы можете путать регулярные выражения с глобусами оболочки
В синтаксисе регулярного выражения
.
представляет любой отдельный символ (обычно исключая символ новой строки), в то время*
как квантификатор означает ноль или более предшествующего атома регулярного выражения (символ или группа).?
является квантификатором, означающим ноль или один экземпляр предшествующего атома, или (в вариантах регулярного выражения, которые его поддерживают) модификатор, который устанавливает поведение квантификатора как не жадное.В глобусах оболочки
?
представляет один символ (например, регулярное выражение.
), а*
представляет последовательность из нуля или более символов (эквивалентную регулярному выражению.*
).Несколько ссылок, которые вы можете найти полезными: http://www.regular-expressions.info/quickstart.html и http://mywiki.wooledge.org/glob
источник
Примечание:
Examples provided are in Python.
хотя концепция остается прежней.'.'
является совпадающим символом, который соответствует любому символу, кроме символа новой строки (это также может быть переопределеноre.DOTALL
аргументом в Python). Следовательно, это также называется Wildcard .'*'
является квантификатором (определяет частоту появления элемента). Сокращено от {0,} .Это означает «соответствовать нулю или более» - группа, которая предшествует звезде, может встречаться в тексте любое количество раз. Он может полностью отсутствовать или повторяться снова и снова.
'?'
также квантификатор . Сокращено от {0,1} .Это означает «Совпадение нуля или одной группы, предшествующей этому вопросительному знаку». Это также можно интерпретировать как необязательную часть, предшествующую знаку вопроса .
например:
В приведенном выше примере '?' указывает, что две цифры, предшествующие ему, являются необязательными. Они могут не встречаться или встречаться не более одного раза.
Разница между '.' а также '?':
'.'
соответствует / принимает / проверяет любой отдельный символ для места, которое он содержит в регулярном выражении.например:
'?'
соответствует / проверяет нулевое или единичное вхождение группы, предшествующей ему .Проверьте пример номера мобильного телефона.
То же самое и с
'*'
. Он проверит ноль или более вхождений группы, предшествующей ему .Комбинация:
'.*'
: Принимает столько последовательностей, сколько доступно. Жадный подход .'.*?
«Принимает первую согласованную последовательность и останавливается. Нежадный подходДля получения дополнительной информации, прочитайте следующие два вопроса ...
источник