Eu poderia obter um exemplo de como esses três elementos (são chamados de metacaracteres?) Diferem?
Sei que isso *
significa tudo ou nada, mas não tenho certeza se é a maneira certa de pensar sobre isso. Por outro lado, .
e ?
parece o mesmo. Eles combinam com um personagem, certo?
Respostas:
Retirado direto da Wikipedia :
A grande diferença é que o asterisco corresponde a zero ou mais ocorrências, enquanto o ponto de interrogação corresponde a zero ou uma ocorrência. Compare estes dois exemplos:
Como na
colouur
letra u (o elemento anterior antes do qualificador?
) ocorreu mais de uma vez, ela não corresponde?
, mas corresponde a*
Exemplo semelhante:
Na mesma página da Wikipedia:
No nosso exemplo,
Apropriadamente, o último lê como
match any line that has "colou", plus any character, plus letter "r"
Conclusão
Você perguntou: "Eu sei que '*' significa tudo ou nada, mas não tenho certeza se é a maneira certa de pensar sobre isso. Por outro '.' & '?' parece o mesmo. " Como você pode ver, o ponto e o asterisco não são exatamente iguais. O ponto opera com qualquer caractere que possa estar ocupando essa posição específica, enquanto o ponto de interrogação opera no elemento anterior.
fonte
Você pode estar confundindo expressões regulares com globs de shell
Na expressão regular, a sintaxe
.
representa qualquer caractere único (geralmente excluindo o caractere de nova linha), enquanto*
é um quantificador que significa zero ou mais do átomo de regex anterior (caractere ou grupo).?
é um quantificador que significa zero ou uma instância do átomo anterior ou (nas variantes de expressões regulares que o suportam) um modificador que define o comportamento do quantificador como não ganancioso.Em globs de shell,
?
representa um único caractere (como o do regex.
) enquanto*
representa uma sequência de zero ou mais caracteres (equivalente ao regex.*
).Algumas referências que você pode achar úteis são: http://www.regular-expressions.info/quickstart.html e http://mywiki.wooledge.org/glob
fonte
Nota:
Examples provided are in Python.
Embora o conceito permaneça o mesmo.'.'
é um símbolo correspondente que corresponde a qualquer caractere, exceto o caractere de nova linha (isso também pode ser substituído pelore.DOTALL
argumento em Python). Por isso, também é chamado como curinga .'*'
é um quantificador (define com que frequência um elemento pode ocorrer). É a abreviação de {0,} .Significa "igualar zero ou mais" - o grupo que precede a estrela pode ocorrer várias vezes no texto. Pode estar completamente ausente ou repetido várias vezes.
'?'
também é um quantificador . É a abreviação de {0,1} .Significa "Corresponder a zero ou a um grupo que precede esse ponto de interrogação". Também pode ser interpretado como a parte que precede o ponto de interrogação é opcional .
por exemplo:
No exemplo acima '?' indica que os dois dígitos anteriores a ele são opcionais. Eles podem não ocorrer ou ocorrer no máximo uma vez.
Diferença entre '.' e '?':
'.'
corresponde / aceita / verifica qualquer caractere único para o lugar que está mantendo na expressão regular.por exemplo:
'?'
corresponde / verifica a ocorrência zero ou única do grupo que a precede .Veja o exemplo de número de celular.
O mesmo acontece com
'*'
. Ele verificará zero ou mais ocorrências do grupo que a precede .Combinação:
'.*'
: Aceita quantas sequências estiverem disponíveis. Abordagem gananciosa .'.*?
Aceita a primeira sequência correspondente e para. Abordagem não gananciosaPara obter mais informações, considere a leitura após duas perguntas ...
fonte