2012-11-19 1 views
2

J'ai une phrase avec une structure uniforme que j'aimerais utiliser regex pour extraire certains mots de la phrase. Par exemple, la structure de la phrase est la suivante:Motif correspondant à une structure de phrases uniforme

["Take the"] + [train] + ["bound train to"] + [stop] 

où les mots entre guillemets sont codés en dur et les mots sans les guillemets sont variables. Par exemple, en fonction de cette structure de la phrase, les phrases suivantes sont applicables:

- Take the L bound train to 1st street. 
- Take the 1 bound train to neverland. 

je besoin d'aide à venir avec un modèle de regex qui correspondrait contre cela et me permettre d'analyser le [le train] et [arrêt] . Mon regex kunfu est faible, et je pourrais utiliser de l'aide.

+0

aussi avec www.rubular.com vous pouvez tester votre propre reg exps –

Répondre

3

Expression rationnelle très simple: '^Take the (.*) bound train to (.*)\.$' qui stocke [train] dans le premier groupe de capture et [stop] dans la seconde.

^    # Match the start of the string 
Take the  # Match the literal string 
(.*)   # Capture the [train] 
bound train to # Match the literal string 
(.*)   # Capture the [stop] 
\.    # Match the fullstop 
$    # Match the end of string 
+1

wow, c'est si simple ... je me sens stupide .. merci –

0
preg_match("/^Take\sthe\s([\d\w]+)\sbound\strain\sto\s([\w\d]+)$/", $string, $hits); 

Quelque chose comme cela devrait fonctionner

0

De ma compréhension, il semble que vous voulez faire une sorte de templating qui nécessiterait une refonte de votre structure de la phrase et la mise en forme.

Je vois ce qui suit:

Take the %start% bound train to %stop% 

Ce qui est très facile à remplacer par les mots spécifiques que vous avez besoin.

/%stop%/Union Station 
/%stop%/East Station 

Je sais cela a duré autour de votre question, mais il ferait une meilleure solution qu'un fourre-tout d'expression régulière qui/pourrait devenir difficile de maintenir à l'avenir.