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.

SetiSeeker
fonte

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.

Ned Batchelder
fonte
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 .

Alin Purcaru
fonte