Je cherche un motif qui correspond à tout jusqu'à la première occurrence d'un caractère spécifique, disons un ";" - un point - virgule .
J'ai écrit ceci:
/^(.*);/
Mais il correspond en fait à tout (y compris le point-virgule) jusqu'à la dernière occurrence d'un point-virgule.
/^(.*?);/
devrait également fonctionner (cela s'appelle non gourmand ), mais les réponses données en utilisant[^;]*
sont meilleures.\w+(?!([^]+;)|;)
mais cela ne veut pas pourquoi?.+(?!([^]+;)|;)
Réponses:
Vous avez besoin
Le
[^;]
est une classe de caractères , elle correspond à tout sauf un point-virgule.Pour citer la
perlre
page de manuel:Cela devrait fonctionner dans la plupart des dialectes regex.
la source
foo=bar;baz=bax;bab=baf
et elle correspondaitbab=baf
même s'il n'y a pas;
exactement ce dont j'ai besoin. Je ne sais pas pourquoi cela fonctionne bien si la spécification dit que tout correspond sauf le symbole cible ...Aurait;
travail?
L'
?
opérateur est paresseux, donc l'expression régulière prend le moins possible avant de faire correspondre le;
.la source
/^[^;]*/
Le [^;] dit correspondre à tout sauf un point-virgule. Les crochets sont un opérateur de correspondance d'ensemble, il s'agit essentiellement de faire correspondre n'importe quel caractère de cet ensemble de caractères,
^
au début, il s'agit d'une correspondance inverse, donc faites correspondre tout ce qui ne se trouve pas dans cet ensemble.la source
Essayer
/[^;]*/
Google
regex character classes
pour plus de détails.la source
Essayer
/[^;]*/
C'est une classe de caractère négatif .
la source
exemple de texte:
Si, par exemple, nous avons l'exemple de texte ci-dessus, l'expression régulière
/(.*?\;)/
vous donnera tout jusqu'à la première occurrence de point-virgule (;
), y compris le point-virgule:"this is a test sentence;"
la source
;
car car ce n'est pas un caractère spécial regex. Le regroupement()
n'est pas également requis. Vous pouvez aller avec/.*?;/
?
personnage rend le match paresseux (correspondant aussi peu de fois que possible). Pensez aux regex correspondant aux personnages jusqu'au premier point-virgule, puis cela ne va pas plus loin car il abandonne (paresseux;))ce n'est pas une solution regex, mais quelque chose d'assez simple pour la description de votre problème. Divisez simplement votre chaîne et obtenez le premier élément de votre tableau.
production
la source
Cela m'a été très utile car j'essayais de trouver comment faire correspondre tous les caractères d'une balise xml, y compris les attributs. Je rencontrais le problème "correspond à tout jusqu'à la fin" avec:
mais a pu résoudre le problème avec:
après avoir lu ce post. Merci a tous.
la source
<!DOCTYPE>
balise. Puisque l'analyseur n'a pas pu le gérer.Cela correspondra à la première occurrence uniquement dans chaque chaîne et ignorera les occurrences suivantes.
la source
"/^([^\/]*)\/$/"
travaillé pour moi, pour obtenir uniquement les meilleurs "dossiers" d'un tableau comme:la source
Vraiment un peu triste que personne ne vous ait donné la bonne réponse ...
En regex,? le rend non gourmand. Par défaut, l'expression régulière correspondra autant que possible (gourmand)
Ajoutez simplement un? et il sera non gourmand et correspondra le moins possible!
Bonne chance, j'espère que ça aide.
la source
Je l'ai trouvé
fonctionne bien.
',' étant le "délimiteur" ici.
la source