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.

Foi útil?

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

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top