2010-08-08 3 views
1

Je suis tout à fait nouvelle à toute chose Regex et a essayé de faire un preg_match_all en PHP qui, genre de résultats que je voulais, mais le problème est qu'il correspond à tout après ce que je voulais en fait ... comme ceci:Arrêtez une regex correspondant à * tout * après ce que je veux réellement correspondre!

chaîne: This is something <code>Some code here</code> and more match de Regex: <code>Some code here</code> and more correspondance de Regex Recherché: <code>Some code here</code>

Voici mon expression régulière que j'utilise: /<code>(.*)<\/code>/

Je pense que c'est quelque chose à voir avec le début et la fin / délimiteurs mais je ne suis pas entièrement sûr.

Toute aide serait appréciée, merci!

Répondre

8

L'étoile est gourmande, ce qui signifie qu'elle correspond autant que possible. Utilisez plutôt

(.*?) 

, ce qui en fait paresseux. Vous pouvez également utiliser des classes de caractère niées:

!<code>([^<]*)</code>! 

EDIT: Depuis MVDS supprimé/sa réponse, voici une astuce: vous pouvez éviter d'avoir à échapper à la barre oblique (/) si vous ne l'utilisez pas comme un délimiteur, comme je l'ai fait ci-dessus^(utilisé !)

Voici une bonne ressource sur regex:
http://www.regular-expressions.info/repeat.html

+0

C'est le seul qui a semblé fonctionner à partir de toutes les réponses! Merci! – tarnfeld

+0

regex.info a aussi quelques exemples traitant des balises HTML (le 1er): http://www.regular-expressions.info/examples.html –

1

Vous devez désactiver la gourmandise. Utilisez .*? à la place, je crois.

0

Je ne suis pas 100% sûr que ce soit même compilait - dont vous avez besoin pour échapper à la seconde / comme si:

/<code>(.*)<\/code>/ 

Alors que PHP reconnaît comme un personnage à correspondre plutôt à la fin de la expression régulière (je pense que cela peut être une compilation comme une regex de remplacement).

+0

Il s'avère que je me suis échappé de toute façon, j'ai oublié de mettre mon code ici ... – tarnfeld

2

vous voulez faire la .* être non gourmand. Si vous placez un ? après cette partie du motif, tout correspond à la partie suivante de l'expression régulière qui correspond. Alors faites la regex /<code>(.*?)<\/code>/

Questions connexes