URL yerine regex

3 Cevap php

I'm trying to make an url that adds a / to all hrefs and srcs in a string. It should only add a / to urls that don't have a http:// at their beginning and that don't have / yet also.

Bu varsa:

<a href="ABC">...
<img src="DEFG">...
<a href="/HIJ">...
<a href="http://KLMN">...

Sonuçlar böyle bir şey olmalı:

<a href="/ABC">...
<img src="/DEFG">...
<a href="/HIJ">...
<a href="http://KLMN">...

Bu benim bugüne kadar geldim budur:

&(href|src)="?!(\/|http::\/\/)(.+)"

Ve yerini olurdu

$1="/$2"

Ama, çalışmıyor.

  • Ben yanlış ne yapıyorum?
  • Nasıl çalışma regex gibi bakmak gerekir

3 Cevap

$str = preg_replace('/(href|src)="([^\/][^:]*)"/', '\1="/\2"', $str)

Bu ne sormak, ancak bir iki nokta üst üste (:) içeren herhangi bir dize bir "/" ekledi almazsınız bu biraz istisna vardır olacaktır. Yani kolayca vb http://, ftp://, işlemek için değil, aynı zamanda ": efgh abcd" gibi bir şey için çalışmaz sağlar.

Bu href veya src içinde etiketlerini maç olacak ve ilk grup adresi içerir.

(<[^<]*?(?:href|src)=")(?!http|/)(.+?)("[^<]*?>)

Ve ile değiştirin:

$1/$2$3