Regex – os hífens devem ser escapados?

Duplicar Possível:
Como combinar hifens com expressão regular?

O hífen é um caractere especial no regex, por exemplo, para selecionar um intervalo, eu poderia fazer algo como:

[0-9A-F] 

Mas fora dos colchetes, é apenas um caractere normal, certo? Eu testei isso em alguns testadores de regex on-line, e os hífens parecem funcionar como um caractere normal fora dos colchetes (ou até mesmo dentro de colchetes se não estiver entre dois caracteres – por exemplo, [-g] parece corresponder – ou g) se é escapado ou não. Não consegui encontrar a resposta para isso, mas estou imaginando se é ou não convencional escaping dos hifens.

Obrigado!

Corrigir em todas as frentes. Fora de uma class de personagem (isso é o que os colchetes são chamados) o hífen não tem nenhum significado especial, e dentro de uma class de caracteres, você pode colocar um hífen como o primeiro ou último caractere no intervalo (por exemplo [-az] ou [0-9-] ), OU escape (eg [az\-0-9] ) para adicionar “hífen” à sua class.

É mais comum encontrar um hífen colocado primeiro ou último dentro de uma class de personagem, mas de maneira nenhuma você será linchado por hordas de barba furiosa por escolher escaping dele.

(Na verdade … minha experiência tem sido que muita regex é empregada por pessoas que não combinam totalmente a syntax. Nesses casos, você normalmente verá tudo que escapou (por exemplo, [az\%\$\#\@\!\-\_] ) simplesmente porque o engenheiro não sabe o que é “especial” e o que não é … então eles “jogam pelo seguro” e ofuscam a expressão com cargas de barras invertidas em excesso. seus contemporâneos, e sua posteridade, um grande favor, tomando o tempo para realmente entender a syntax regex antes de usá-la.)

Ótima pergunta!

Fora das classs de personagens, é convencional não fugir dos hífens. Se eu visse um hífen escapado do lado de fora de uma class de personagem, isso sugeriria que foi escrito por alguém que não estava muito confortável com regexes.

Dentro das classs de personagens, não acho que um caminho seja convencional em detrimento do outro; na minha experiência, geralmente parece ser colocar primeiro ou último, como em [-._:] ou [._:-] , para evitar a barra invertida; mas eu também já vi muitas vezes que ele escapou, como em [._\-:] , e eu não chamaria isso de convencional.

Normalmente você sempre colocaria o hífen primeiro na seção de correspondência [] . EG, para corresponder a qualquer alfanumérico, incluindo hífens (escritos do modo mais longo), você usaria [-a-zA-Z0-9]