В чем разница между:
(.+?)
и
(.*?)
 когда я использую его в своем php preg_match regex?
В чем разница между:
(.+?)
и
(.*?)
 когда я использую его в своем php preg_match regex?
Они называются кванторами.
 * 0 или более из предыдущего выражения
 + 1 или более из предыдущего выражения
По умолчанию квантификатор жадный, это означает, что он соответствует максимально возможному числу символов.
 ? после того, как квантификатор изменит поведение, чтобы сделать этот квантификатор "неровным", означает, что он будет соответствовать как можно меньше.
Пример жадных/неровных
Например, в строке "abab"
 a.*b будет соответствовать "abab" (preg_match_all вернет одно совпадение, "abab" )
while a.*?b будет соответствовать только стартовому "ab" (preg_match_all вернет два совпадения, "ab" )
Вы можете тестировать свои регулярные выражения онлайн, например. на Regexr, см. жадный пример здесь
Первый (+) - один или несколько символов. Второй (*) - это ноль или более символов. Оба не являются жадными (?) и соответствуют чему-либо (.).
 + является минимальным, * также может быть нулевым.
A + соответствует  одному или нескольким экземплярам предыдущего шаблона. A * соответствует  ноль или более экземплярам предыдущего шаблона.
В принципе, если вы используете +, должен быть хотя бы один экземпляр шаблона, если вы используете *, он по-прежнему будет соответствовать, если нет его экземпляров.
 + соответствует хотя бы одному символу
 * соответствует любому числу (включая 0) символов
 ? обозначает ленивое выражение, поэтому оно будет соответствовать как можно меньшему количеству символов.
Звезда очень похожа на плюс, единственное отличие состоит в том, что, когда плюс соответствует 1 или более предшествующим символу/группе, начало соответствует 0 или более.
Рассмотрим ниже строку, которая будет соответствовать.
ab
Образец (ab.*) вернет совпадение для группы захвата с результатом ab
Пока шаблон (ab.+) не будет соответствовать и ничего не возвращает.
Но если вы измените строку на следующую, она вернет aba для шаблона (ab.+)
aba
		Я думаю, что в предыдущих ответах не удалось выделить простой пример:
например, у нас есть массив:
numbers = [5, 15]
Следующее выражение regex ^[0-9]+ соответствует только 15.
Однако ^[0-9]* соответствует как 5 and 15. Разница в том, что для оператора + требуется хотя бы один  дубликат предыдущего выражения регулярного выражения
В RegEx {i,f} означает "между i и f соответствует". Давайте рассмотрим следующие примеры:
{3,7} означает от 3 до 7 совпадений{,10} означает до 10 совпадений без нижнего предела (т.е. нижний предел равен 0){3,} означает не менее 3 совпадений без верхнего предела (т.е. верхний предел бесконечен){,} означает, что верхний предел или нижний предел для количества совпадений (т.е. нижний предел равен 0, а верхний предел бесконечен){5} означает ровно 4Большинство хороших языков содержат аббревиатуры, поэтому RegEx:
+ является сокращением для {1,}* является сокращением для {,}? является сокращением для {,1}Это означает, что + требует не менее 1 совпадения, в то время как * принимает любое количество совпадений или нет совпадений вообще, а ? принимает не более одного совпадения или нуля.
Кредит: Codecademy.com