Regex ile yardım php değiştirin

3 Cevap php

Ben değişmesi gereken statik html dosyaları URL'ler bir grup var.

Onlar şimdi, bu gibi görünür:

<img src="/foldera/folderb/folderc/images/imgxyz.jpg" />

Onlar bu gibi bakmak gerekir:

<img src="imgxyz.jpg" />

Yani, ben sadece preg_replace () Her açılır ve yapan bir php script yazdım.

Benim regex (çift kaçtı ters eğik, evet):


$regex = '/<img src="\\/foldera\\/folderb\\/folderc\\/images\\/([^"]*)" \\/>/'

$replacement = '<img src="$0" />' ;
So I am only capturing anything after /images until the closing quote. But what I get is something like:
<img src="<img src="/foldera/folderb/folderc/images/imgxyz.jpg" />" />

Bu yakalama grup istekli ve ... falan / FolderA / folderb bölümü ile eşleşen değil gibi görünüyor.

Burada neler oluyor?

3 Cevap

Değiştirilmesi için $1 kullanın. $0 bütün eşleşir. Sen ilk grup istiyorum.

$replacement = '<img src="$1" />' ;


Daha iyi bir yolu yedek parçası olarak basename kullanmak olacaktır:

$regex = '/(<img src=")([^"]*)"( \\/>)/e';

$replacement = "stripslashes('\$1').basename(stripslashes('\$2')).stripslashes('\$3')";

Sadece bir dipnot düşmek gibi, şimdi soru cevap edilmiştir ki: Eğer eğik varsa '/' regex, size önerilen örnekte olduğu gibi, regex içinde olanları kaçmak için sınırlayıcı güçler olarak eğik kullanarak:

$regex = '/<img src="\\/foldera\\/folderb\\/folderc\\/images\\/([^"]*)" \\/>/'

Gerçekten anlamak / değiştirmek / korumak :-( tkings zorlaştırır

Bu sürece en başından ve regex sonunda aynı olduğu gibi, sınırlayıcı olarak başka bir karakter kullanabilirsiniz. Örneğin, durum bu tür insanlar genellikle hemen hemen böyle, '#' kullanın:

$regex = '#<img src="/foldera/folderb/folderc/images/([^"]*)" />#'

Daha kolay hayır, okumak?

(Of course, if you have '# 'regex içinde, siz) bu sınırlayıcı olduğu gibi, onları kaçmak zorunda olacak

  • Endeksi 0 bütün eşleşen dize ifade eder, 1 indeksini değiştirmek, ya da

  • "Basename" işlevini kullanın veya

  • Aşağıdaki kullanın:

    $ Regex = '/ /'

Bu durumda 2 indeksini değiştirmek için olurdu.