Ho cercato di ottenere l'espressione regolare per questo per tutta la mattina e ho colpito il muro. Nella stringa seguente non voglio corrispondere a ogni barra diretta che segue .com/<first_word>
con l'eccezione di qualsiasi /
dopo l'URL.Corrispondenza di un certo carattere dopo un Lookbehind positivo
$string = "http://example.com/foo/12/jacket Input/Output";
match------------------------^--^
La lunghezza delle parole tra le barre non dovrebbe avere importanza.
Regex: (?<=.com\/\w)(\/)
risultati:
$string = "http://example.com/foo/12/jacket Input/Output"; // no match
$string = "http://example.com/f/12/jacket Input/Output";
matches--------------------^
Regex: (?<=\/\w)(\/)
risultati:
$string = "http://example.com/foo/20/jacket Input/O/utput"; // misses the /'s in the URL
matches----------------------------------------^
$string = "http://example.com/f/2/jacket Input/O/utput"; // don't want the match between Input/Output
matches--------------------^-^--------------^
Poiché il lookbehind non può avere modificatori e deve essere un'asserzione di lunghezza zero mi chiedo se ho appena inciampato nel percorso sbagliato e dovrebbe cercare un'altra combinazione regex.
Il look positivo è il modo giusto per farlo? O mi manca qualcosa di diverso da una copiosa quantità di caffè?
NOTA: etichettato con PHP perché la regex dovrebbe funzionare in qualsiasi delle preg_*
funzioni.
funzione The'preg_match' restituisce uno partita. Dici che devi abbinare tutti i personaggi che ci sono dopo un certo schema. Dovresti usare 'preg_match_all'. –
Ho ancora l'impressione che si tratti di un problema XY. Cosa stai cercando di ottenere? Perché abbinare quelle barre? Potresti url_parse dell'URL e poi fare ciò che vuoi. Esplodere, ad es. –
No, non è un problema XY @ WiktorStribiżew come la regex dovrebbe funzionare in * any * delle funzioni 'preg_ *'. –