J'ai besoin de faire correspondre un caractère espace dans une expression régulière PHP. Quelqu'un a une idée?
Je veux dire comme "gavin schulz", l'espace entre les deux mots. J'utilise une expression régulière pour m'assurer que je n'autorise que des lettres, des chiffres et un espace. Mais je ne sais pas comment trouver l'espace. Voici ce que j'ai en ce moment:
$newtag = preg_replace("/[^a-zA-Z0-9s|]/", "", $tag);
Réponses:
Si vous cherchez un espace, ce serait
" "
(un espace).Si vous cherchez un ou plusieurs, c'est
" *"
(c'est deux espaces et un astérisque) ou" +"
(un espace et un plus).Si vous recherchez un espacement commun, utilisez
"[ X]"
ou"[ X][ X]*"
ou"[ X]+"
où seX
trouve le caractère de tabulation physique (et chacun est précédé d'un seul espace dans tous ces exemples).Ceux-ci fonctionneront dans tous les moteurs * regex que j'ai jamais vus (dont certains n'ont même pas le caractère un ou plusieurs
"+"
, ugh).Si vous savez que vous utiliserez l'un des moteurs regex les plus modernes,
"\s"
et ses variations sont la voie à suivre. En outre, je crois que les limites des mots correspondent également au début et à la fin des lignes, ce qui est important lorsque vous recherchez des mots qui peuvent apparaître sans espaces précédant ou suivant.Pour PHP en particulier, cette page peut vous aider.
De votre édition, il semble que vous souhaitiez supprimer tous les caractères non valides Le début de ceci est (notez l'espace à l'intérieur de l'expression régulière):
Si vous voulez également que la ruse garantisse qu'il n'y ait qu'un seul espace entre chaque mot et aucun au début ou à la fin, c'est un peu plus compliqué (et probablement une autre question) mais l'idée de base serait:
la source
A-Za-z...
. Le curseur entre crochets le dicte. Le déplacement du curseur en dehors des crochets change sa signification en caractères correspondants dans l'ensemble au début de la chaîne.\040
correspond exactement au caractère espace.Regexp PHP reference
Nouvelles séquences Link
Escape pour Regex PHP
la source
Voici tout ce que vous devez savoir sur les espaces dans les expressions régulières:
[[:blank:]]
Espace ou tabulation uniquement[[:space:]]
Espace blanc\s
Tout caractère d'espacement\v
Espace vertical\h
Espace horizontalx
Ignorer les espacesla source
Il me semble que l'utilisation d'un REGEX dans ce cas serait tout simplement exagéré. Pourquoi ne pas simplement strpos pour trouver le caractère espace. De plus, le caractère espace dans les expressions régulières n'a rien de spécial, vous devriez pouvoir le rechercher de la même manière que pour tout autre caractère. C'est-à-dire, à moins que vous n'ayez désactivé l'espace blanc du motif, ce qui ne serait guère nécessaire dans ce cas.
la source
En Perl, le commutateur est
\s
(espace blanc).la source
Ensuite, c'est aussi simple que d'ajouter un espace à ce que vous avez déjà:
(note, j'ai supprimé le
s|
qui semblait involontaire? Certainement les
était redondant; vous pouvez restaurer le|
si vous en avez besoin)Si vous voulez spécifiquement * un espace *, comme dans seulement un seul, vous aurez besoin d' une expression plus complexe que cela, et peut-être envisager un morceau non regex séparé de la logique.
la source
Vous pouvez également utiliser le \ b pour une limite de mot. Pour le nom, j'utiliserais quelque chose comme ceci:
EDIT Modifier ceci pour être une expression régulière dans l'exemple Perl
MODIFIER ENCORE En fonction de ce que vous voulez:
la source
J'essaie [[: space:]] dans un cas où il semble que les blogueurs dans WordPress utilisent des caractères d'espace non standard. Il semble que cela fonctionnera.
la source
Utilisez-le comme ceci pour permettre un espace unique.
la source