Eu usei o testador de regex em regex101.com (sem afiliação) para testá-los.
(.*?)
corresponde a qualquer caractere ( .
) qualquer número de vezes ( *
), o menor número de vezes possível para fazer a correspondência de expressão regular ( ?
). Você obterá uma correspondência em qualquer sequência, mas capturará apenas uma sequência em branco devido ao ponto de interrogação. Esse recurso é muito mais útil quando você tem um regex mais complicado. Aqui, o analisador não precisa capturar nada para obter uma correspondência: o asterisco permite qualquer número de caracteres no grupo de captura, enquanto o ponto de interrogação faz com que o analisador salve o máximo possível do texto de entrada, resultando em nada sendo capturado.
(.*)?
captura um grupo zero ou uma vez ( ?
). Esse grupo consiste em uma execução de qualquer tamanho ( *
) de qualquer caractere ( .
). Isso também corresponderá a qualquer coisa, mas capturará a primeira linha, já que o ponto corresponde a qualquer coisa, exceto uma nova linha.