2010-04-25 6 views
-1

hey puis-je nettoyer un preg_match en php de ceci:php nettoyer regex

preg_match_all("/(".$this->reg['wat'].")?(".$this->reg['wat'].")?(".$this->reg['wat'].")?(".$this->reg['wat'].")?(".$this->reg['wat'].")?(".$this->reg['wat'].")?(".$this->reg['wat'].")?/",$value,$match); 

pour ressembler à ceci:

preg_match_all("/ 
    (".$this->reg['wat'].")? 
    (".$this->reg['wat'].")? 
    (".$this->reg['wat'].")? 
    (".$this->reg['wat'].")? 
    (".$this->reg['wat'].")? 
    (".$this->reg['wat'].")? 
    (".$this->reg['wat'].")? 
/",$value,$match); 

en ce moment chaque espace, il compte comme une rupture ling si il ne retournera aucune trouvaille lors de la recherche. mais il semble juste plus propre et plus facile à lire, c'est pourquoi je vous demande de savoir. Je cherchais une de ces lettres à ajouter après la fermeture "/" dans la regex. grâce

+0

fournir un exemple réel –

Répondre

5

Oui, jetez un oeil à la PCRE_EXTENDED option:

x (PCRE_EXTENDED)
Si ce modificateur est défini, les caractères d'espacement dans le modèle sont totalement ignorés sauf lorsqu'ils sont échappés, ou à l'intérieur d'une classe de caractères, et les caractères entre un # non échappé à l'extérieur d'une classe de caractères et le caractère de nouvelle ligne suivante, inclusif, sont également ignorés. Ceci est équivalent au modificateur Perl/x, et permet d'inclure des commentaires dans des patterns compliqués. Notez cependant que cela s'applique uniquement aux caractères de données. caractères blancs ne peuvent jamais apparaître dans les séquences de caractères spéciaux dans un modèle, par exemple dans la séquence (? (qui introduit une parenthèse conditionnelle.
+0

bien c'est dans une classe est donc pourquoi cela ne fonctionne pas? je l'ai ajouté et il ne trouve aucun résultat. Les classes – David

+0

n'ont rien à voir avec le fonctionnement de PCRE_EXTENDED. – VolkerK

+0

Cette réponse a été ajoutée à la [FAQ sur les expressions régulières de dépassement de capacité de la pile] (http://stackoverflow.com/a/22944075/2736496), sous "Modificateurs". – aliteralmind

2
preg_match_all('/('.$this->reg['wat'].'){0,7}/', $value, $match); 

Cela devrait être assez propre.

+0

Je viens de taper cela à la volée, pas si simple – David

+0

Ensuite, vous devez définir correctement comment il est simple, car je ne vais pas vous donner une réponse qui est inutilement compliquée. – erisco

1

Dans le cas où il n'a pas été évidente: (et comme une version d'extension/simplifiée de la réponse de VolkerK) ajouter le drapeau de x à l'appel preg_match:.

preg_match_all(".../x",$value,$match); 

Cela vous permettra d'utiliser les nouvelles lignes sans regex les jumelant fait

+0

Ayant un exemple est certainement utile, merci. – Wildcard