Visualizzazione risultati 1 fino 5 di 5

Discussione: Popolare array preg_match con solamente i "named capture"

  1. #1
    Guest

    Predefinito Popolare array preg_match con solamente i "named capture"

    Come da titolo, avrei l'esigenza di popolare un array, precisamente quello passato a preg_match(), con solamente gli elementi che hanno un nome nell'espressione regolare; esempio:
    Codice PHP:
    preg_match('#blog/(?P<id>[0-9]+)/(?P<title>[a-zA-Z0-9\-_]+)#', '/blog/9/title-in-the-uri', $matches);
    Facendo un print_r() dell'array $matches, ottengo:
    Codice:
    Array
    (
        [0] => blog/9/title-in-the-uri
        [id] => 9
        [1] => 9
        [title] => title-in-the-uri
        [2] => title-in-the-uri
    )
    Posso fare in modo, senza complicarmi troppo la vita, di avere l'array popolato esclusivamente con id e title, cioè il 2° ed il 4° elemento?

    Grazie in anticipo

  2. #2
    L'avatar di dreadnaut
    dreadnaut non è connesso Super Moderatore
    Data registrazione
    22-02-2004
    Messaggi
    6,269

    Predefinito

    A parte questo, non mi sembra ci sia nulla di pronto:
    Codice PHP:
    foreach ($matches as $k => $v)
    if (
    is_numeric($k))
    unset(
    $matches[$k]);

  3. #3
    Guest

    Predefinito

    Per non aprire un altro topic dato che è relativamente inerente a quest'argomento: è possibile popolare l'array con determinati valori senza metterli tutti?
    Per esempio, avendo la seguente espressione regolare:
    Codice:
    #blog/([0-9]+)([/]([a-z0-9]+)([/](ohter|item))?)?#i
    E' possibile popolarlo con solamente la prima, la terza e la quinta regola?

  4. #4
    L'avatar di dreadnaut
    dreadnaut non è connesso Super Moderatore
    Data registrazione
    22-02-2004
    Messaggi
    6,269

    Predefinito

    Quello che vuoi è un "non-capturing subpattern", ovvero (?:qualcosa).

    Codice:
    #blog/([0-9]+)(?:[/]([a-z0-9]+)(?:[/](other|item))?)?#i
    Controlla però, non posso verificare ora.

  5. #5
    Guest

    Predefinito

    Allora facevo giusto, con la differenza che io scrivevo così:
    Codice:
    #blog/([0-9]+)(?:[/]([a-z0-9]+)((?:[/])?(other|item))?)?#i
    Sicuramente è colpa dell'ora; lavorare alle 5 del mattino non è il massimo

    Ovviamente grazie Dread, come sempre :mnrgreen:

    PS: poi appena puoi ti faccio vedere cosa ho fatto; secondo la classe che ho scritto è molto più elastica e di facile gestione

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •