Domanda

Sto cercando una stringa di URL ... e la mia preg_match mi sta dando un importo non corretto di partite per la mia stringa demo.

Stringa:

  

Ehi, venite a scoprire il mio sito a www.example.com

funzione:

preg_match("#(^|[\n ])([\w]+?://[\w]+[^ \"\n\r\t<]*)#ise", $string, $links);
echo count($links);

Il risultato viene fuori come 3.

Qualcuno può aiutarmi a risolvere questo? Sono nuovo di REGEX.

È stato utile?

Soluzione

$links è il href="http://php.net/preg_match" rel="nofollow noreferrer"> serie di partite sub :

  

Se matches è fornito, allora è riempito con i risultati di ricerca. $matches[0] conterrà il testo che ha trovato il modello completo, $matches[1] avrà il testo che ha trovato il primo criterio posto tra parentesi catturato, e così via.

Le partite dei due gruppi più la partita del pieno regolari risultati delle espressioni in tre elementi di matrice.

Forse si desidera invece tutte le partite utilizzando preg_match_all .

Altri suggerimenti

Se si utilizza preg_match_pattern, (come suggerito Gumbo), si prega di notare che se si esegue il regex contro questa stringa, saranno entrambi corrispondere al valore della vostra attributo di ancoraggio "href", così come il testo collegato che in questo caso accade a comtain un URL. Questo rende due partite.

Sarebbe saggio per eseguire un array_unique sul gruppo di risultati:)

In aggiunta ai consigli su come utilizzare preg_match, credo che ci sia qualcosa di seriamente sbagliato con l'espressione regolare che si sta utilizzando. Si consiglia di provare qualcosa di simile a questo, invece:

 preg_match("_([a-zA-Z]+://)?([0-9a-zA-Z$-\_.+!*'(),]+\.)?([0-9a-zA-Z]+)+\.([a-zA-Z]+)_", $string, $links);

Questo dovrebbe gestire la maggior parte dei casi (anche se non avrebbe funzionato se ci fosse una stringa di query dopo che il dominio di primo livello). In futuro, quando si scrivono le espressioni regolari, vi consiglio i seguenti siti web per aiutare: http: // www. regular-expressions.info/ e soprattutto http://regexpal.com/ per loro test, come si 're scrivendole.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top