PHP Regex N'importe quel caractère
Le caractère .
dans une expression rationnelle php accepte tous les caractères, sauf un retour à la ligne. Que puis-je utiliser pour accepter tous les caractères, y compris les retours à la ligne?
5 réponses
Ceci est couramment utilisé pour capturer tous les caractères:
[\s\S]
Vous pouvez utiliser toute autre combinaison de "Type-X + Non-Type-X" de la même manière:
[\d\D]
[\w\W]
Mais {[2] } est reconnu par convention comme un raccourci pour "vraiment n'importe quoi".
Vous pouvez également utiliser le .
Si vous basculez l'expression rationnelle en mode "dotall" (alias "single-line") via le modificateur "s"
. Parfois, ce n'est pas une solution viable (regex dynamique dans une boîte noire, par exemple, ou si vous ne voulez pas modifier le entier regex). Dans de tels cas, les autres alternatives font la même chose, quelle que soit la configuration de l'expression rationnelle.
C'est le caractère .
qui signifie "chaque caractère" (edit: op edited). Et vous devez ajouter l'option s à votre expression rationnelle, par exemple:
preg_match("`(.+)`s", "\n");
serait -
[.\n]+
Ne fonctionne pas?
Que diriez-vous de (.|\n)+
? Je l'ai testé et cela semble fonctionner.
Je suis assez sûr que c'est l'interprétation littérale de exactement ce que vous demandez.
Le manuel PHP page pour Dot indique que:
Si L'option PCRE_DOTALL est définie, les points correspondent également aux nouvelles lignes.
Il manque une chose importante ici. [\s\S]
correspond à un caractère, alors qu'une nouvelle ligne peut être une séquence de caractères. (Windows utilise deux caractères: \r\n
.) Ni .
(avecDOT_ALL modificateur) ni [\s\S]
ne correspondront à la séquence de saut de ligne. La meilleure façon de faire correspondre n'importe quel caractère ou n'importe quel saut de ligne est (.|\R)
, "tout sauf un saut de ligne ou un saut de ligne". \R
correspond \n
, \r
et \r\n
.