Expressão regular para excluir um conjunto de palavras-chave
-
02-07-2019 - |
Pergunta
Eu quero uma expressão que irá falhar quando encontra palavras como "boon.ini" e "http". O objetivo seria a de tomar essa expressão e ser capaz de construir para qualquer conjunto de palavras-chave.
Solução
^(?:(?!boon\.ini|http).)*$\r?\n?
(retirado RegexBuddy 's biblioteca) irá corresponder a qualquer linha que não contém boon.ini e / ou http. É isso que você queria?
Outras dicas
Uma expressão alternativa que poderia ser utilizado:
^(?!.*IgnoreMe).*$
^
= indica o início da linha
$
= indica o fim da linha
(?! Expression)
= indica corresponder a zero olhar largura frente negativo sobre a expressão
É necessária a ^
na frente, caso contrário, quando avaliado o aspecto negativo frente poderia começar de algum lugar dentro de / para além do texto 'IgnoreMe' -. E fazer um jogo onde você não quer isso também
por exemplo. Se você usar o regex:
(?!.*IgnoreMe).*$
Com a entrada "Olá IgnoreMe por favor", isto irá resultar em algo como: "gnoreMe favor", como os achados à frente negativo olhar que não há nenhuma cadeia completa 'IgnoreMe' após o 'I'
Ao invés de negar o resultado dentro da expressão, você deve fazê-lo em seu código. Dessa forma, a expressão torna-se muito simples.
\b(boon\.ini|http)\b
voltaria true
se boon.ini ou http estava em qualquer lugar na cadeia. Não vai coincidir com palavras como httpd ou httpxyzzy por causa da \b
, ou limites de palavra. Se você quiser, você pode simplesmente removê-los e vai coincidir com os demais. Para adicionar mais palavras-chave, basta adicionar mais tubos.
\b(boon\.ini|http|foo|bar)\b
que você pode ser bem servido por escrever um regex que irá sucesso quando encontra as palavras que você está procurando, e depois inverter a condição.
Por exemplo, em perl você usaria:
if (!/boon\.ini|http/) {
# the string passed!
}
^[^£]*$
A expressão acima irá restringir apenas o símbolo de libra do string. Isso permitirá que todos os personagens, exceto string.
Em que idioma biblioteca / regexp? Achei que você pergunta era em torno ASP.NET caso em que você pode ver a seção "lookhead negativo" deste artigo: http://msdn.microsoft.com/en-us/library/ms972966. aspx
A rigor negação de uma expressão regular, ainda define uma linguagem regular, mas há muito poucas bibliotecas / línguas / ferramenta que permite expressá-lo.
lookahed negativa pode servir-lhe o mesmo, mas a sintaxe real depende do que você está usando. A resposta de Tim é um exemplo com (?...)
Eu usei esse (com base na resposta Tim Pietzcker) para excluir URLs de subdomínio não-produção de filtros de perfil do Google Analytics:
^\w+-*\w*\.(?!(?:alpha(123)*\.|beta(123)*\.|preprod\.)domain\.com).*$
Você pode ver o contexto aqui: Regex para excluir várias palavras