Почему функция findall () возвращает странное значение? [Дубликат]

Если вы получаете это сообщение во время сохранения или компиляции сборки, просто закройте все файлы, а затем откройте любой файл для компиляции и сохранения.

Для меня причина в том, что я переименовал файл, и старый файл все еще был открыт.

59
задан David19801 20 December 2011 в 14:14
поделиться

9 ответов

Они называются кванторами.

* 0 или более из предыдущего выражения

+ 1 или более из предыдущего выражения

Per по умолчанию квантификатор жадный, это означает, что он соответствует как можно большему количеству символов.

? после квантификатора изменяет поведение, чтобы сделать этот квантификатор «неровным», означает, что он будет соответствовать как можно меньше.

Пример greedy / ungreedy

Например, в строке « abab »

a.*b будет соответствовать «abab» (preg_match_all будет возвращать одно совпадение «abab»)

, в то время как a.*?b будет соответствовать только стартовому «ab» (preg_match_all вернет два совпадения, «ab»)

Вы можете проверить ваши регулярные выражения онлайн, например на Regexr, см. жадный пример здесь

96
ответ дан Morten Jensen 25 August 2018 в 15:01
поделиться

Я думаю, что в предыдущих ответах не удалось выделить простой пример:

, например, у нас есть массив:

numbers = [5, 15]

Следующее выражение регулярного выражения ^[0-9]+ соответствует: 15 только. Однако ^[0-9]* соответствует как 5 and 15. Разница в том, что для оператора + требуется, по крайней мере, один дубликат предыдущего выражения регулярного выражения

0
ответ дан Crt 25 August 2018 в 15:01
поделиться

A + соответствует одному или нескольким экземплярам предыдущего шаблона. * соответствует нулю или более экземплярам предыдущего шаблона.

Итак, в основном, если вы используете +, должен быть хотя бы один экземпляр шаблона, если вы используете *, он будет по-прежнему совпадают, если нет экземпляров.

5
ответ дан DaveRandom 25 August 2018 в 15:01
поделиться

+ минимальна, * также может быть нулевой.

5
ответ дан jeroen 25 August 2018 в 15:01
поделиться

Звезда очень похожа на плюс, единственное отличие состоит в том, что, когда плюс соответствует 1 или более предшествующим символу / группе, начало соответствует 0 или более.

3
ответ дан Madara Uchiha 25 August 2018 в 15:01
поделиться

В RegEx {i,f} означает, что «между i и f соответствует». Давайте посмотрим на следующие примеры:

  • {3,7} означает от 3 до 7 соответствий
  • {,10} означает до 10 совпадений без нижнего предела (т.е. нижний предел равен 0)
  • {3,} означает не менее 3 совпадений без верхнего предела (т.е. верхний предел бесконечен)
  • {,} означает, что верхний предел или нижний предел для количество совпадений (т. е. нижний предел равен 0, а верхний предел бесконечен)
  • {5} означает ровно 4

Большинство хороших языков содержат сокращения, RegEx:

  • + является сокращением для {1,}
  • * является сокращением для {,}
  • ? является сокращенное значение для {,1}

Это означает, что + требует не менее 1 совпадения, в то время как * принимает любое количество совпадений или не имеет совпадений вообще, а ? принимает не более 1 совпадающие или нулевые.

Кредит: Codecademy.com

1
ответ дан Miladiouss 25 August 2018 в 15:01
поделиться

Первый (+) - один или несколько символов . Второй (*) - ноль или более символов . Оба не являются жадными (?) и соответствуют чему-либо (.).

17
ответ дан Quentin 25 August 2018 в 15:01
поделиться

Рассмотрим следующую строку:

ab

Образец (ab.*) вернет совпадение для группы захвата с результатом ab

Пока шаблон (ab.+) не будет соответствовать и ничего не возвращать.

Но если вы измените строку на следующую, она вернет aba для шаблона (ab.+)

aba
3
ответ дан wajatimur 25 August 2018 в 15:01
поделиться

+ соответствует хотя бы одному символу

* соответствует любому числу (включая 0) символов

. ? указывает ленивое выражение, поэтому оно будет соответствовать как можно меньше символов.

6
ответ дан Xophmeister 25 August 2018 в 15:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: