Regex - Não contém determinados caracteres


274

Eu preciso de um regex para corresponder se em algum lugar de uma frase NÃO houver <ou>.

Se <ou> estiverem na sequência, ele deverá retornar false.

Eu tive um sucesso parcial com isso, mas apenas se meus <> estiverem no começo ou no fim:

(?!<|>).*$

Estou usando .Net se isso faz diferença.

Obrigado pela ajuda.

Respostas:


436
^[^<>]+$

O sinal de intercalação na classe de caractere ( [^) significa corresponder a qualquer coisa, exceto, portanto, o início da sequência de caracteres, um ou mais itens, exceto <e >, em seguida, o final da sequência de caracteres.


3
O que significa o primeiro sinal de intercalação? Isso não significa nada que não contenha esses caracteres ... significando apenas cadeias que contêm esses caracteres?
RobKohr

11
O primeiro sinal de intercalação significa o início da sequência. O dólar significa o fim da corda.
Ned Batchelder

2
@ PhilipRego Cuidado com caracteres especiais: o shell interpreta alguns deles. Veja se agora você tem um arquivo chamado '] + $' em seu diretório. Coloque o regex inteiro entre aspas simples para fazê-lo funcionar.
Ned Batchelder

Ótima resposta! Você poderia adicionar uma explicação de por que existe um +e o primeiro sinal de intercalação?
Dr_Zaszuś 28/01

1
@ Dr_Zaszuś "+" significa "um ou mais" e "^" significa "início da string".
Ned Batchelder

59

Aqui está:

^[^<>]*$

Isso testará a string que não tem nem <não>

Se você deseja testar uma string que pode ter <e >, mas também deve ter algo diferente, use apenas

[^<>] (or ^.*[^<>].*$)

Onde [<>]significa qualquer um de <e> e [^<>]significa qualquer um que não é de <ou> .

E, claro, o link obrigatório .

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.