Estou procurando um padrão que corresponda a tudo até a primeira ocorrência de um caractere específico, digamos ";" - um ponto e vírgula .
Eu escrevi isto:
/^(.*);/
Mas na verdade corresponde a tudo (incluindo o ponto e vírgula) até a última ocorrência de um ponto e vírgula.
/^(.*?);/
também deve funcionar (é chamado de não ganancioso ), mas as respostas fornecidas[^;]*
são melhores.\w+(?!([^]+;)|;)
mas isso não acontece por quê?.+(?!([^]+;)|;)
Respostas:
Você precisa
A classe
[^;]
é de personagem , corresponde a tudo, exceto um ponto e vírgula.Para citar a página de
perlre
manual:Isso deve funcionar na maioria dos dialetos regex.
fonte
foo=bar;baz=bax;bab=baf
e ela correspondebab=baf
mesmo que não haja;
exatamente o que eu preciso. Não sei por que ele funciona embora se especificação diz partidas tudo, mas o símbolo do alvo ...Seria;
trabalhos?
O
?
operador é preguiçoso, portanto, o regex agarra o mínimo possível antes de corresponder ao;
.fonte
/^[^;]*/
O [^;] diz corresponde a qualquer coisa, exceto um ponto e vírgula. Os colchetes são um operador de correspondência de conjunto, essencialmente, corresponde a qualquer caractere nesse conjunto de caracteres;
^
no início, ele é uma correspondência inversa, portanto, corresponda a qualquer coisa que não esteja nesse conjunto.fonte
Tentar
/[^;]*/
Google
regex character classes
para detalhes.fonte
Tentar
/[^;]*/
Essa é uma classe de personagem negativa .
fonte
texto de amostra:
Se, por exemplo, tivermos o texto de exemplo acima, o regex
/(.*?\;)/
fornecerá tudo até a primeira ocorrência de ponto e vírgula (;
), incluindo o ponto e vírgula:"this is a test sentence;"
fonte
;
char, pois não é um caráter especial de regex. O agrupamento()
também não é necessário. Você pode ir com/.*?;/
?
personagem torna a partida preguiçosa (combinando o menor número de vezes possível). Pense nos personagens regex correspondência até o primeiro ponto e vírgula, então não ir mais longe, porque dá-se (preguiçoso;))essa não é uma solução de regex, mas algo bastante simples para a descrição do seu problema. Basta dividir sua string e obter o primeiro item da sua matriz.
resultado
fonte
Isso foi muito útil para mim, pois estava tentando descobrir como combinar todos os caracteres em uma tag xml, incluindo atributos. Eu estava correndo para o problema "combina tudo até o fim" com:
mas conseguiu resolver o problema com:
depois de ler este post. Obrigado a todos.
fonte
<!DOCTYPE>
tag. Desde analisador não foi capaz de lidar com isso.Isso corresponderá à primeira ocorrência apenas em cada sequência e ignorará as ocorrências subsequentes.
fonte
"/^([^\/]*)\/$/"
funcionou para mim, para obter apenas as "pastas" principais de uma matriz como:fonte
Realmente meio triste que ninguém tenha lhe dado a resposta correta ....
Em regex,? torna não ganancioso. Por padrão, o regex corresponderá o máximo possível (ganancioso)
Basta adicionar um? e não será ganancioso e corresponderá o mínimo possível!
Boa sorte, espero que ajude.
fonte
eu achei aquilo
funciona bem.
',' sendo o "delimitador" aqui.
fonte