Regex per trovare Spazio Bianco o alla Fine della Stringa

Sto cercando di trovare ogni istanza di @username nel testo del commento e sostituirlo con un link. Ecco il mio PHP finora:

$comment = preg_replace('/@(.+?)\s/', '<a href="/users/${1}/">@${1}</a> ', $comment);

L’unico problema è la regex è dipendente vi sia spazio dopo la chiocciola (@nome utente di riferimento. Qualcuno mi può aiutare tweak questo modo, corrisponderà anche se è alla fine della stringa?

InformationsquelleAutor Kirk Ouimet | 2010-03-22



2 Replies
  1. 9

    provare /@(\w+)/ invece di /@(.+?)\s/.

    • Eccellente, che ha funzionato perfettamente! Mi puoi dire di più su \w?
    • semplicemente corrisponde a qualsiasi “parola” di caratteri: A-Za-z0-9_
  2. 13

    Per rilevare gli spazi o alla fine della stringa, utilizzare: /@(.+?)(?=\s|$)/, ma a meno che il vostro username contiene caratteri non alfanumerici, è più semplice utilizzare il \w per il carattere di word o \b per interruzione di parola, cioè: /@(.+?)\b/ o /@(\w)+/.

    • O potremmo utilizzare per determinare se si desidera aggiungere uno spazio alla fine del link? $comment = preg_replace('/@(.+?)(?:\s|$)/', '<a href="/users/${1}/">@${1}</a>${2}', $comment);
    • Sì, ma in questo caso dovrete utilizzare un gruppo di cattura (rimuovere il ?:).
    • Questo in realtà è stato davvero utile! Grazie per lo spazio bianco fix
    • (?=\s|$) un grande aiuto per la regexly-le persone disabili! Grazie per il trucco.

Lascia un commento