2017-10-02 6 views
-1

J'essaie de trouver un moyen d'avoir des caractères optionnels dans une fonction PHP regex (instruction). J'essaie d'entrer une adresse très simple composée de données numériques, d'un espace, d'un nom de rue avec une lettre majuscule, d'une rue, d'un boulevard, d'une avenue, etc., puis des caractères optionnels de NSWE seulement. Voici ce que j'ai jusqu'à présent ...Caractères d'option dans l'expression rationnelle PHP

Jusqu'à présent, ce qui fonctionne et ce qui ne fonctionne pas ...

133 fois Route (ne fonctionne pas)

133 fois Road_ (le trait de soulignement est en fait un espace et cela fonctionne)

133 fois route a (travaux, mais ne doivent pas)

133 route N fois

suggestions ont grandement apprécié.

d+\s[A-z]+\s[A-z]+(\s+[NSWE])*? 
+0

Voir https://regex101.com/r/tKuM77/1 –

+0

Cela correspond de toute façon aux caractères autres que 0-9, comme les chiffres hindous-arabes. Soyez plus précis quant à ce que vous voulez vraiment que l'expression rationnelle fasse. Veuillez réécrire la question. – PHPglue

+0

Utiliser [A-z] 'pour faire correspondre toutes les lettres est généralement une mauvaise idée, car les caractères entre crochets, barre oblique inverse, carotte, trait de soulignement et caractère arrière sont également inclus dans cette plage. – CAustin

Répondre

1

je ferais quelque chose comme ceci:

\d+ [A-Z][a-z]+ [A-Z][a-z]+([NSWE])? 

J'ai remplacé les \s avec des espaces si de nouvelles lignes ou onglets entre les deux ne sont pas autorisés. Si vous ne voulez pas comme vous pouvez rester avec

\d+\s[A-Z][a-z]+\s[A-Z][a-z]+(\s[NSWE])? 

J'ai changé [A-z]+-[A-Z][a-z]+ pour deux raisons: Vous êtes autorisé à utiliser une lettre majuscule et les clés comme underscores ne fonctionnera maintenant plus.
Si je vous ai mal compris et que vous vouliez ajouter autant de lettres de [NSWE] que vous le souhaitez, vous pouvez utiliser ceci:

\d+ [A-Z][a-z]+ [A-Z][a-z]+([NSWE]+)? 

Here you can see it in action

Ici vous pouvez le voir en action.

Si ça marche, c'est moi qui vous ai dit comment faire, si ce n'est pas le cas, je ne sais pas qui a inventé cette regex cassée.

+0

Merci beaucoup. Fonctionne parfaitement pour ce que j'ai besoin de faire. –

+0

@TheRoofer Si cela fonctionne, vous devez accepter la réponse. https://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work – chris85

+0

Oui cela fonctionne. Merci de me rappeler de le faire. –