Comment créer une expression qui corresponde absolument à tout (y compris les espaces blancs)?
Exemple:
Regex: J'ai acheté _____ moutons.
Allumettes: j'ai acheté des moutons. J'ai acheté un mouton. J'ai acheté cinq moutons.
J'ai essayé d'utiliser (.*)
, mais cela ne semble pas fonctionner.
Mise à jour: je l'ai fait fonctionner, apparemment le problème n'était pas avec les expressions régulières, c'est juste que les caractères (.) Étaient échappés.
.*
devrait marcher. Pouvez-vous coller votre code actuel?Réponses:
Normalement, le point correspond à n'importe quel caractère sauf les sauts de ligne .
Donc, si cela
.*
ne fonctionne pas, définissez l'option "le point correspond aux nouvelles lignes" (ou utilisez(?s).*
).Si vous utilisez JavaScript, qui n'a pas d'option "dotall", essayez
[\s\S]*
. Cela signifie "faire correspondre n'importe quel nombre de caractères qui sont soit des espaces ou des non-espaces" - en fait "correspondre à n'importe quelle chaîne".Une autre option qui ne fonctionne que pour JavaScript (et n'est reconnue par aucune autre saveur regex) est celle
[^]*
qui correspond également à n'importe quelle chaîne. Mais[\s\S]*
semble être plus largement utilisé, peut-être parce qu'il est plus portable.la source
.*
ne correspond pas\n
mais utilise une chaîne qui ne contient que\n
parce qu'elle correspond à 0 caractère.(?s).*
travaux pour moi correspondaient à tout, y compris la nouvelle ligne*
(comme dans/.*(?:)/
) ou en utilisant le constructeur regex (var foo = new RegExp(".*")
).(.*?)
correspond à tout - je l'utilise depuis des années.la source
("title":".*?")
[\s\S]*
ou[^]*
.w+
ça ne suffit pas, je finis par utiliser.+
. Heureusement, il n'est pas encore revenu pour me mordre.Choisissez et mémorisez 1 des éléments suivants !!! :)
Explication:
\s
: espace\S
: pas d'espace\w
: mot\W
: pas un mot\d
: chiffre\D
: pas chiffre(Vous pouvez échanger le
*
pour+
si vous voulez 1 ou PLUS de caractères [au lieu de 0 ou plus]).MODIFICATION DE BONUS:
Si vous souhaitez tout faire correspondre sur une seule ligne, vous pouvez utiliser ceci:
Explication:
^
: ne pas\n
: saut de ligne+
: pour 1 caractère ou plusla source
Essaye ça:
ou même
la source
Utilisez
.*
et assurez-vous que vous utilisez l'équivalent de votre implémentation sur une seule ligne afin de faire correspondre les fins de ligne .Il y a une grande explication ici -> http://www.regular-expressions.info/dot.html
la source
Parce que
.
Rechercher un seul caractère, sauf la nouvelle ligne ou le terminateur de ligne.Donc, pour faire correspondre n'importe quoi, vous pouvez utiliser comme ceci:
(.|\n)*?
J'espère que ça aide!
la source
(.*?)
ne fonctionne pas pour moi. J'essaie de faire correspondre les commentaires entourés de/* */
, qui peuvent contenir plusieurs lignes.Essaye ça:
Cette expression régulière correspond à
a
ouanything else expect a
. Absolument, cela signifie tout assortir.BTW, dans ma situation,
/\*([a]|[^a])*/
correspond aux commentaires de style C.Merci @mpen pour une manière plus concise.
la source
[\s\S]
- c'est-à-dire faire correspondre les espaces et les non-espaces.Pour JavaScript, la réponse la meilleure et la plus simple semble être /.*/.
Comme suggéré par d'autres, /(.*?)/ fonctionnerait également mais /.*/ est plus simple. Les () à l'intérieur du motif ne sont pas nécessaires, autant que je puisse voir ni la fin? pour correspondre absolument à tout (y compris les chaînes vides)
NON-SOLUTIONS:
/ [\ s \ S] / ne correspond pas aux chaînes vides, ce n'est donc pas la solution.
/ [\ s \ S] * / correspond également aux chaînes vides. Mais il a un problème: si vous l'utilisez dans votre code, vous ne pouvez pas commenter ce code car le '* /' est interprété comme une fin de commentaire.
/ ([\ s \ S] *) / fonctionne et n'a pas le problème de commentaire. Mais c'est plus long et plus compliqué à comprendre que /.*/.
la source
Si vous utilisez JavaScript, ES2018 a ajouté le drapeau s (dotAll). Avec le
s
drapeau, le point.
correspondra à tous les caractères, y compris les retours à la ligne.Remarque : il n'est pas encore pris en charge par certains navigateurs.
la source
La spécification 2018 fournit l' indicateur s (alias: dotAll), de sorte qu'il
.
correspondra à n'importe quel caractère, y compris les sauts de ligne:Le code ci-dessus fonctionne dans Chrome, mais le
s
drapeau n'est pas encore implémenté dans Firefox, mais il le sera bientôt .la source
http://sandbox.phpcode.eu/g/b2243.php
la source
Je recommande l'utilisation
/(?=.*...)/g
Exemple
Utilisez regex101 pour tester
la source
Honnêtement, beaucoup de réponses sont anciennes, donc j'ai trouvé que si vous testez simplement n'importe quelle chaîne quel que soit le contenu du caractère avec "/.*/i", vous obtiendrez TOUT suffisamment.
la source