Etes-vous conscient que l'argument regex de l'une des fonctions preg_
de PHP doit être délimité par deux? Par exemple:
preg_match_all(`'/foo/'`, $target, $results)
'...'
sont les cordes délimiteurs, /.../
sont les regex délimiteurs et le regex est foo
. Les délimiteurs de regex n'ont pas besoin d'être des barres obliques, ils doivent simplement correspondre; certains choix populaires sont #...#
, %...%
et ~...~
. Ils peuvent également être des paires équilibrées de caractères entre parenthèses, comme {...}
, (...)
, [...]
et <...>
; ceux-ci sont beaucoup moins populaires et pour une bonne raison.
Si vous omettez les délimiteurs de regex, la phase de compilation de regex échouera probablement et le message d'erreur n'aura probablement aucun sens. Par exemple, ce code:
preg_match_all('<td style="white-space:nowrap;">###.##</td>', $s, $m)
... générerait ce message:
Unknown modifier '#'
Il tente d'utiliser la première paire de crochets comme délimiteurs regex, et tout ce qui suit le >
comme modificateurs de regex (par exemple, i
pour insensible à la casse, m
pour la multiligne). Pour résoudre ce problème, vous devez ajouter vrais délimiteurs regex, comme ceci:
preg_match_all('%<td style="white-space:nowrap;">###\.##</td>%i', $s, $m)
Le choix de delimiter est une question de préférence personnelle et de commodité. Si j'avais utilisé #
ou /
, j'aurais dû échapper à ces caractères dans la regex réelle. J'ai échappé au .
parce que c'est un méta-caractère regex.Enfin, j'ai ajouté le modificateur i
pour démontrer l'utilisation des modificateurs et parce que le code HTML n'est pas sensible à la casse.
@ user268851 Il suffit de mettre en retrait 4 espaces et le rendu sera correct. J'ai supprimé le lien vers votre image, et j'ai rajouté le code HTML à votre question. –
bien quelle est la regex que vous utilisez? – prodigitalson
Cette regex devrait le faire: '\ Q