J'essaie d'obtenir le droit Regex pour tout cela toute la matinée et j'ai frappé le mur. Dans la chaîne suivante, je ne voudrais pas correspondre à chaque barre oblique qui suit .com /
/ code> après em> le URL.
$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--------------------^-^--------------^
3 Réponses :
Utilisez Voir démo . P> https://regex101.com/r/at3kg2/6 p> \ k code> ici avec
\ g code> .grab the
groups code>.
remplacer code> p>
Pour une raison quelconque, cela ne fonctionne pas dans le contexte de Preg_Match () Code>
OK - Preg_Match_All () CODE> TRAVAINS Mais autre
PREG .... CODE> Fonctions échouez - comme
Preg_replace () Code>.
@Jayblancard Le seul problème avec Remplacer est un remplacement supplémentaire sera arrivé à la fin ... devinez que cela devra être traité séparément
J'ai eu ceci comme le retour http://example.com/foo|/12/Jacket entrée / sortie code> à l'aide de votre code. Notez qu'aucune des barres obliques n'a été supprimée, mais un tuyau a été ajouté. Même dans votre exemple de substitution, les barres obliques sont laissées en place. Je
@Jayblancard Nous pouvons le faire comme ça ... u juste besoin de supprimer un extra | code> plus tard. REGEX101.com/R/AT3KG2/8
Pouvez-vous également copier ces regex dans votre réponse. Ils ne peuvent pas rester sur REGEX101 pour toujours! Qui rendrait vos réponses inutiles aux autres
Ce dernier exemple que vous avez provoqué des espaces ajoutés et un tuyau supplémentaire @vks http://example.com/foo||12|Jacket|wow code>
Si vous souhaitez utiliser remplaçant chaque lookedede négatif Preg_replace CODE>, cette regex devrait fonctionner:
/ code> par un
| Code> après le premier
/ code> qui apparaît après le démarrage
.com code>. p>
(? est nécessaire pour éviter de remplacer une chaîne sans démarrer
.com code> comme
/ foo / bar / baz / abcd code>. p>
Le problème avec c'est que vous remplacez le / code> dans la partie de la chaîne avec
entrée / sortie code>
Il ne devrait s'agir que les slashes après i> foo, mais pas dans quoi que ce soit dans l'URL
Il existe une URL dans la chaîne, ainsi que d'autres données. Les barres obliques dans les autres données ne doivent pas être affectées.
Un autre \ g code>
et \ k code>
idée basée.
$re = '~(?:^\S+\.com/\w|\G(?!^))\w*+\K/~';
(: code> groupe non capture Pour définir point d'entrée em> ^ \ s + \. COM / \ w code> ou Colle correspond \ g (?! ^) code> à celui-ci. Li>
-
\ w * + \ k / code> possessivement correspond à toute quantité de caractères de mots jusqu'à ce qu'une barre oblique. \ k code> réinitialise match. Li>
ul> voir démo à REGEX101 P> P>
La fonction
Preg_Match code> renvoie une correspondance. Vous dites que vous devez faire correspondre tous les caractères il y a après un certain motif. Vous devez utiliser
preg_match_all code>.
J'ai toujours une impression c'est un problème xy. Qu'essayez-vous d'atteindre? Pourquoi correspondre à ces barres obliques? Vous pouvez URL_PARSE L'URL, puis faire ce que vous voulez. Exploser, par exemple
Non, ce n'est pas un problème Xy @ Wiktorstribiżew, comme la regex devrait fonctionner dans n'importe quel i> du
PREG _ * Code> Fonctions.