0
votes

Comment une expression régulière imbriquée dans PHP?

J'essaie de travailler avec des expressions régulières en utilisant PHP pour atteindre les éléments suivants:

Je suis intéressé à obtenir un tableau avec les agrumes Les règles sont: * La liste des agrumes est entre parenthèses * Les agrumes sont séparés par ",", mais pourraient également être séparés par "" seulement. J'ai essayé: xxx

mais je ne peux pas l'obtenir, j'ai essayé plusieurs expressions sans résultats

une aide?


0 commentaires

3 Réponses :


0
votes

Voici une suggestion. Premièrement, analyser la chaîne entre la parenthèse pour obtenir votre liste. Ensuite, vous pouvez essayer d'utiliser str_replace () , à changer les espaces aux virgules. Enfin, utilisez enfin l'explosion () pour convertir la chaîne séparée de virgule maintenant en une matrice. Le seul problème serait si l'un des articles a un espace de son nom.


0 commentaires

0
votes

Essayez (?: (?! ^) \ g [] + | \ ([] *) \ k \ w +

Démo

Travail en trouvant Paren (puis Correspondre Word, Continuer \ g correspondez le mot suivant.
Répéter jusqu'à ce que pas plus de mot

étend Demo2


1 commentaires

Merci, ça a bien fonctionné pour moi, mais pourriez-vous l'expliquer un peu? Salutations.



1
votes

L'expression que vous avez essayé \ ([ [ \ s] *? (\ w +) [ \ s] * \ \ \) code> ne correspondra qu'un seul fruit éventuellement entre les espaces ou les virgules car n'est pas une répétition.

Pour obtenir les correspondances distinctes répétées, vous pouvez utiliser le \ g code> ancreur p>

Vous n'avez pas à faire la classe de caractères non gourmande [ , \ s] *? code> comme la virgule ou le caractère blancheur ne peut pas se chevaucher avec correspondant aux caractères de mots \ w + code> p>

si vous voulez vous assurer qu'il y a Une parenthèse de fermeture, vous pouvez utiliser un lookahead positif p> xxx pré>

  • (?: code> groupe de capture
    • \ ( code> correspondez ( code> li>
    • (? = [^ ()] * \)) code> affirme ce qui est à droite est une parenthèse de fermeture li>
    • | code> ou li>
    • \ g (?! \ a) [ \ h] + code> affirme la position à la fin de la correspondance précédente, pas au début li> ul> li>
    • ) code> Fermer le groupe Non Capture Li>
    • \ k code> oublie ce qui est assorti li>
    • \ w + code> Match 1+ Word caractères LI> ul>

      Démo Regex P>

      Notez que l'utilisation de [ \ h] + code> pourrait également correspondre à correspondre à des caractères d'oranges p> p>

      si la virgule est facultative et que l'espace est toujours là , vous pouvez également utiliser ,? \ h + code> pour empêcher que P>


      Une autre option consiste à obtenir la correspondance d'abord, puis diviser sur [ \ h +] Une virgule ou 1+ Whitspace Whitspace Whitspace P> xxx pré>

      Démo Regex | Démo PHP p>

      par exemple em> p>

      Array
      (
          [0] => oranges
          [1] => mandarins
          [2] => lemons
      )
      


0 commentaires