Subtração de classe de caracteres, conversão de sintaxe Java para RegexBuddy
-
12-09-2020 - |
Pergunta
Qual mecanismo de expressão regular o Java usa?
Em uma ferramenta como RegexBuddy se eu usar
[a-z&&[^bc]]
essa expressão em Java é boa, mas no RegexBuddy não foi compreendida.
Na verdade, relata:
Combine um único caractere presente na lista abaixo
[a-z&&[^bc]
- Um personagem no intervalo entre
a
ez
:a-z
- Um dos personagens
&[^bc
:&&[^bc
- Combine o personagem
]
literalmente :]
mas eu quero combinar um personagem entre a
e z
cruzado com um personagem que não é b
ou c
Solução
Como a maioria dos sabores regex, java.util.regex.Pattern
possui recursos próprios específicos com sintaxe que pode não ser totalmente compatível com outras;isso inclui união, interseção e subtração de classes de caracteres:
[a-d[m-p]]
:a
atravésd
, oum
atravésp
:[a-dm-p]
(União)[a-z&&[def]]
:d
,e
, ouf
(interseção)[a-z&&[^bc]]
:a
atravész
, exceto porb
ec
:[ad-z]
(subtração)
A "advertência" mais importante do Java regex é que matches
tenta combinar um padrão com o todo corda.Isso é atípico na maioria dos motores e às vezes pode ser uma fonte de confusão.
Veja também
Na subtração de classe de personagem
A subtração permite definir, por exemplo, "todas as consoantes" em Java como [a-z&&[^aeiou]]
.
Esta sintaxe é específica para Java.No esquema XML, .NET, JGSoft e RegexBuddy, é [a-z-[aeiou]]
.Outros sabores podem não suportar esse recurso.
Referências
- regular-expressions.info/Classes de caracteres em expressões regulares XML
- MSDN - Classes de caracteres de expressão regular - Subtração
Perguntas relacionadas
Outras dicas
Java usa seu próprio mecanismo de expressão regular, cujo comportamento é definido no Padrão aula.
Você pode testá-lo com um Plug-in Eclipse ou on-line.
RegexBuddy ainda não oferece suporte à sintaxe de união, interseção e subtração de classe de caracteres que é exclusiva do tipo de expressão regular Java.Esta é a única parte da sintaxe Java regex que o RegexBuddy ainda não suporta.Estamos planejando implementar isso em uma versão futura do RegexBuddy.A razão pela qual isso foi adiado é porque nenhum outro tipo de expressão regular suporta esta sintaxe.
P.S.:Se você tiver alguma dúvida sobre o RegexBuddy em particular, adicione a tag "regexbuddy" à sua pergunta.Então a pergunta aparece automaticamente no meu leitor de RSS.Não sigo a tag "regex" porque muitas perguntas usam essa tag, e a maioria já foi respondida quando as vejo.