php preg_replace dönen boş

3 Cevap php

Bu bana biraz aptalca bir hata olduğuna eminim ama bu hata yatıyor ayıklamak mümkün olmamıştır.

I'm trying to change image paths in html file with this regexp. It should work, but preg_replace is just returning null time after time.

preg_replace("(src=){1}([\"']){1}(.*)([\/]+)(.*[\"']{1})", '/my/path'.$5 , $source);

Herkes elini lütfen ödünç ister?

3 Cevap

Burada devam eden bir çok şey var.

  1. /(src=){1}/ /src=/ ile aynıdır
  2. .* muhtemelen boş bir dize maçlar gibi, ne beklediğiniz yapmıyor (ve açgözlü olarak ayarlanır)
  3. Sen $5 bir dize birleştirerek, ama 5 $ PHP set olmayacak; muhtemelen '/ benim / path $ 5' demek

Eğer çekmeye çalışıyorsanız gerçekten olsa, src, bir HTML (ya da XML) etiketi üzerinden nitelik, sen DOM kullanıyor olmalıdır. this comment bakın.

Sizin desen gereksiz komplikasyonlar bir yeri vardır, bu deneyin:

preg_replace('#src=[\'"](.*?)[\'"]#", '/my/path$1', $source);

Eğer sadece çift tırnak görmek olacak biliyorum, hatta kıvrımlara bulunuyor:

preg_replace('#src="(.*?)"#", '/my/path$1', $source);

EDIT

Belki bu istediğiniz yorumları okuduktan?

preg_replace('#(<img\s*.*src=")#', '$1/my/path/', $source);

Eğer böyle bir hata içine çalıştırmak sonra () preg_last_error bakmak gerekir.

Daha fazla bilgi burada mevcuttur: http://www.pelagodesign.com/blog/2008/01/25/wtf-preg_replace-returns-null/ veya http://www.php.net/preg_last_error üzerine