Regex ile Yardım - Wordpress (arama-regex)

5 Cevap php

RE kullanarak benim ilk denemem beni sıkışmış vardır. Ben Search-Regex Plugin üzeri Wordpress web sitesinde Regex kullanarak ve html kodu bir grup HTML örneği içinde gömülü "belirli üzerinde eşleşmesi gerekir ediyorum.:

provide brand-strengthening efforts for the 10-school conference.&#0160; </p>
<p>
   <a href="http://www.learfield.com/oldblog/.a/6a00d8345233fa69e201157155a6fc970c-pi">
   <img alt="MOvalleyConf500" 
        border="0" 
        class="at-xid-6a00d8345233fa69e201157155a6fc970c"
        src="http://www.learfield.com/oldblog/.a/6a00d8345233fa69e201157155a6fc970c-800wi" 
        style="border: 1px solid black; margin: 0px; width: 502px; height: 384px;"             
        title="MOvalleyConf500" />
   </a>
</p>
<p>The photo above

Yukarıdaki örnekte, üç hedef vardır

6a00d8345233fa69e201157155a6fc970c-pi"
6a00d8345233fa69e201157155a6fc970c"
6a00d8345233fa69e201157155a6fc970c-800wi"

I istimal Regex ancak ben sadece biten " değil, tüm dize üzerinde eşleştirmek istiyorum, /6a00d834.*?"/ onları bulur. Bunlar dosya uzantısı eksik görüntüler, bu yüzden ben ifade yedek parça anlıyorum ". Jpg" sona değiştirmeniz gerekiyor, ben sorun yaşıyorum ilk eşleşen bulunuyor.

Ben bu (221) bir grup var, tüm hedefler tüm 6a00d834 daha sonra bazı rasgele alfanümerik bir " ile biten başlar

Herhangi bir fikir takdir. Teşekkürler.

Edit added from OP's comment: Aslında SQL içinde verileri sorgulamak ve değiştirmek için bir eklenti (REGEX) kullanarak Wordpress sitede bulunuyor. Ben herhangi bir Perl uyumlu düzenli ifade kullanabilirsiniz. (Editör notu - eklentisi bağlı olarak, bu büyük olasılıkla aslında Perl ama PCRE'nin PHP'nin uygulama kullanarak değil.)

5 Cevap

String yerine eşleşen ile birlikte yapılabilir. PHP kullanarak konum yana kullanın preg_replace

$newstring = preg_replace("/(6a00d834.*?)(\")/", "\\1.jpg\\2", $oldstring)

Bu iki gruba maçı tatili ve ardından aralarında '. Jpg' ekler.

wordpress regex plugin için, maç dize için / (") / (6a00d834. *?) Kullanın ve sonra değiştirme dizesi için 2 \ \ 1.jpg kullanın.

Bu işe değil misiniz?

/(6a00d834.*?)"/

Edit: Sen .jpg" ile " değiştirmek istedim yorumlarınızı biri dedi; bu durumda bu sıradanifade muhtemelen işe:

/6a00d834.*?(")/

Ancak, yapılacak en iyi şey, ben sağlanan ilk regexpi kullanın, ve bu gibi bir yedek dize kullanmak için muhtemelen:

'\\1.jpg"'

Tabii ki, \\1 Eğer belirli sıradanifade motor Geribaşvurularda için kullandığı ne ile değiştirilmesi gerekir.

Sen soru tam olarak belli değil, ama belki demek:

/6a00d834[^"]*"/

(Yani: a "izleyen" değil sıfır veya daha fazla karakter tarafından takip maçı 6a00d834)

Eğer kullandığınız regex motoru varsa Alternatif olarak, '*' meta-karakteri sınırlamak için bir açgözlü olmayan belirteci kullanabilirsiniz. Regex en ilgili herhangi bir soru kullandığınız motora bağlı olduğunu unutmayın. Örneğin:

$ cat input
6a00384foo" more"
$ perl -ne '/(6a00384[^"]*")/; print "$1\n"' input
6a00384foo"
$ perl -ne '/(6a00384.*?")/; print "$1\n"' input
6a00384foo"
$ sed 's/\(6a00384[^"]*"\).*/\1/' input
6a00384foo"
$ sed 's/\(6a00384.*?"\).*/\1/' input
6a00384foo" more"

Dikkat edin ki '?' sed olmayan açgözlü belirteç olarak hizmet etmez.

Sana 6a00d834 ilk aşağıdakilere kadar sonra her şeyi ayıklamak istediğinizi varsayalım ". Yani bu deneyin:

/6a00d834([^"]*)"/

İlk gruplaşma maçı daha aradığınız dize olacaktır.

Belki de bir grup operatörü kullanılır?

/6a00d834.*?(")/

Sonra, regex API bağlı olarak, Pars eşleşen sadece ne dışarı çekebilirsiniz.

Edit

Ah, dize değiştirme yapmak istiyorum. Ben Perl kullanarak konum tahmin edeceğiz. Bu deneyin:

s/(6a00d834.*?)(")/\1.jpg\2/