Eu preciso de um regex capaz de corresponder a tudo, exceto uma string que comece com um padrão específico (especificamente index.php
e 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.php
e 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]*)*/i
ou/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 \A
para 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 ( /s
em PCRE / Boost / .NET / Python / Java e /m
Ruby) 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 \n
para 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.
cot
ou lan
e 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.php
um 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')
grep
na 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 ...)