Eu preciso de um regex capaz de corresponder a tudo, exceto uma string que comece com um padrão específico (especificamente index.phpe o que se segue, como index.php?id=2342343)
Eu preciso de um regex capaz de corresponder a tudo, exceto uma string que comece com um padrão específico (especificamente index.phpe o que se segue, como index.php?id=2342343)
Respostas:
Não é um especialista em regexp, mas acho que você pode usar um lookahead negativo desde o início, por exemplo ^(?!foo).*$, não deve corresponder a nada do que começar foo.
^((?!foo).)*$( stackoverflow.com/a/406408/3964381 )
Regex: corresponde a tudo, exceto :
foo):
world.no final):
foo) (nenhum padrão compatível com POSIX, desculpe):
|símbolo):
foo):
cat): /cat(*SKIP)(*FAIL)|[^c]*(?:c(?!at)[^c]*)*/iou/cat(*SKIP)(*FAIL)|(?:(?!cat).)+/is(cat)|[^c]*(?:c(?!at)[^c]*)*(ou (?s)(cat)|(?:(?!cat).)*, ou (cat)|[^c]+(?:c(?!at)[^c]*)*|(?:c(?!at)[^c]*)+[^c]*) e, em seguida, verifique com o idioma significa: se o Grupo 1 correspondeu, não é o que precisamos, senão, pegue o valor da correspondência se não estiver vazio[^a-z]+(qualquer caractere que não seja uma letra ASCII minúscula)|:[^|]+Nota de demonstração : a nova linha \né usada nas classes de caracteres negados nas demos para evitar o estouro da correspondência com as linhas vizinhas. Eles não são necessários ao testar seqüências individuais.
Nota da âncora : Em muitas linguagens, use \Apara definir o início inequívoco da sequência e \z(no Python \Z, no JavaScript, $é bom) definir o final da sequência.
Nota de ponto : em muitos tipos (mas não em POSIX, TRE, TCL), .corresponde a qualquer caractere, exceto um caractere de nova linha . Certifique-se de usar um modificador DOTALL correspondente ( /sem PCRE / Boost / .NET / Python / Java e /mRuby) para .corresponder a qualquer caractere, incluindo uma nova linha.
Nota da barra invertida : nos idiomas em que é necessário declarar padrões com as seqüências C que permitem sequências de escape (como \npara uma nova linha), é necessário dobrar as barras invertidas com caracteres especiais para que o mecanismo possa tratá-los como caracteres literais (por exemplo, em Java, world\.será declarado como "world\\."ou use uma classe de caracteres:) "world[.]". Use literais de string bruto (Python r'\bworld\b'), literais de string literal C # @"world\."ou notações literais de strings / regex slashy como /world\./.
^(?!foo$), por que o cifrão precisa estar entre parênteses para que a expressão funcione? Eu esperava ^(?!foo)$dar os mesmos resultados, mas não dá.
$âncora está dentro do cabeçote, faz parte da condição, parte dessa afirmação de largura zero . Se estivesse do lado de fora, como dentro ^(?!foo)$, fará parte do padrão de consumo que exige o fim da sequência logo após o início da sequência, tornando irrelevante o cabeçote negativo negativo, pois sempre retornará verdadeiro (não pode haver texto após o final da sequência) , muito menos foo). Portanto, ^(?!foo$)corresponde ao início de uma sequência que não fooé seguida com a sequência final. ^(?!foo)$corresponde a uma sequência vazia.
cotou lane remover a correspondência, como regex.replace(myString, "^.*?(?:cot|lan)\s*", "").
Você pode colocar um ^no início de um conjunto de caracteres para corresponder a qualquer coisa, menos esses caracteres.
[^=]*
vai combinar tudo, menos =
Basta combinar /^index\.php/e rejeitar o que quer que seja.
str !~ /\Aindex\.php/.
Eu preciso de um poder regex para combinar tudo , mas , exceto uma string que começa com
index.phpum padrão específico (especificamente index.php eo que se segue, como index.php? Id = 2342343)
Use o método Exec
let match,
arr = [],
myRe = /([\s\S]+?)(?:index\.php\?id.+)/g;
var str = 'http://regular-viragenia/index.php?id=2342343';
while ((match = myRe.exec(str)) != null) {
arr.push(match[1]);
}
console.log(arr);
var myRe = /([\s\S]+?)(?:index\.php\?id=.+)/g;
var str = 'http://regular-viragenia/index.php?id=2342343';
var matches_array = myRe.exec(str);
console.log(matches_array[1]);
OU OUTRO JOGO
let match,
arr = [],
myRe = /index.php\?id=((?:(?!index)[\s\S])*)/g;
var str = 'http://regular-viragenia/index.php?id=2342343index.php?id=111index.php?id=222';
while ((match = myRe.exec(str)) != null) {
arr.push(match[1]);
}
console.log(arr);
Que tal não usar regex:
// In PHP
0 !== strpos($string, 'index.php')
grepna linha de comando, por exemplo, ou Perl / Python / qualquer outra linguagem, ou um comando "Executar este regex para cada linha" em um editor de texto, etc ...)