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?

21
demandé sur Timothy 2010-10-26 21:26:11

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.

39
répondu Tomalak 2010-10-26 17:35:11

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");
8
répondu Vincent Savard 2010-10-26 17:27:25

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.

1
répondu gnomed 2010-10-26 17:46:38

Le manuel PHP page pour Dot indique que:

Si L'option PCRE_DOTALL est définie, les points correspondent également aux nouvelles lignes.

0
répondu Franco 2017-05-14 07:43:26

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.

0
répondu steffen 2017-05-14 08:20:00