Regex

Bonjour, j'aimerai extraire "quelquechose" d'une variable comme celle ci
$test = [b]quelquechose[/b];

il y a moyen avec les regex (expressions regulières)
mais je ne sais pas m'en servir.... merci

11 réponses

  • Votes
  • Date
  • Date décroissante
  1. Modérateur
    Salut,

    Avec quel langage ?

    Les balises "[b]" et "[/b]" font parties de la variable ou c'est toi qui essayais de mettre l'expression "quelquechose" en gras ?
    1. Avec une expression régulière étendue cela donnerait quelque chose du type :
      \[.+\](.+)\[/.+\]

      ..et reconnaîtrait la plupart des balises phpBB

      Bien sûr il faut adapter l'expression régulière à ton langage, notamment pour ce qui est des caractères spéciaux !

      GrdScarabe
      1. Modérateur
        Je dirais plutôt quelque chose du genre:
        \[.+\]([^[]+)\[/.+\]

        Sinon il va prendre le texte de la première balise ouvrante à la dernière fermante.

        Ou alors:
        \[.+\](.+)?\[/.+\]
    2. (language = php)

      et je vfais comment pour récuperer ce qu'il y a dedans ces balises avec ces expessions régulieres?? svp
      1. Contributeur
        'lut,

        Tu veux enlever les balises donc?

        Il te faut un preg_replace (http://de2.php.net/manual/en/function.preg-replace.php) avec comme paramètres:

        preg_replace((\[.+\])(.+?)([/.+\]),${2},$texteoriginal)

        Un truc dans le genre je pense...essaye aussi avec .+ a la place de .+?, je connais pas le comportement par défaut dans php...
        1. Il y a ce site très intéressant dédié aux expresion régulière.
          http://www.expreg.com/

          l'exemple suivant est proche du tiens : http://www.expreg.com/voir38

          ton besion doit être proche de ceci (non testé) :
          "^\[b](.*?)[\[/b]$"
          1. Contributeur
            L'exemple en question est valable dans le cas ou la chaine est toute seule et pas noyée au milieu d'un texte...

            Si c'est le cas et si les balises n'ont qu'une lettre à chaque fois le mieux est encore de prendre une substring :)
          2. Contributeur
            Remarque même si la balise a une autre longueur, il suffit de prendre l'index de la première occurence de ] et de la deuxième occurence de [ comme références :)
        2. en fait je n'y arrive pas
          preg_replace((\[.+\])(.+?)([/.+\]),${2},$texteoriginal)
          me renvoi une erreur du type ASCII machin :(
          1. Contributeur
            Ton texte il est comment au départ? Genre:

            Ceci est [b]mon[/b] texte à [b]moi[/b] que [b]j'ai[/b].


            ou bien

            [b]C'est mon texte[/b]


            ou bien encore

            c'est [b]mon[/b] texte


            ?
            1. non mais j'ai réglé ça ... le blem maintenant c'est d'extraire "xxx" et "yyy" de :
              $string = "blabla[email]xxx[/email]blabla[email]yyy[/email]blabla

              :(
              1. bon voila j'ai enfin réussi
                je usis passé par des explode str_replace et split a gogo
                mon code fait 30 lignes pour extraire mais bon ça marche :d et rapide a l'execution merci a tous