Regex ile geçersiz html kodunu ayıklamak


0

Src kısmı olmayan tüm html img etiketlerini seçecek bir pcre regex'e ihtiyacım var. Uzun Hikaye. Yardımı ile (?-s)<img(?!.*?src).*?\/>hangi çizgi bir satır ikinci bir img etiketi WITH src parçası alana kadar iyi çalıştı var. Regex ilk eşleşti <imgson ile />:(

Kötü kısmı nasıl seçerim <img border="0" />:

<p align="center"><img border="0" /> <a href="http://www.megaevent2014.com/enllac/"><img alt src="http://www.megaevent2014.com/banner/gran/" /></a></p>

Bir düzenli ifadede.

Ve img etiketleri bir çok nedenden dolayı geçersiz olabilir. "Sınır" ayıklamak yardımcı olmuyor. Etiketleri src olmadan seçmem gerekiyor, başka hiçbir şey umursamıyor.

Lütfen tavsiye, Saygılarımla, Peter


Stackoverflow'ta bu cevaba bakınız !! stackoverflow.com/questions/1732348/…
Lord Peter

@ LordPeter Doğru, hatasız bir şekilde yapılamaz. Ancak bazı sınırlı bağlamlarda işe yarayabilir.
LatinSuD

Yanıtlar:


0

Aşağıdaki regex deseni benim için çalışıyor ve PCRE Regex için iyi biçimlendirilmiş olmalı:

<img(\s*(?!src)([\w\-])+=([\"\'])[^\"\']+\3)*\s*\/?>
  • Bozmak için <img, hazır bilgi ile başlar ve sonra \s*herhangi bir beyaz boşluk karakteri [\r\n\t\f ]sıfır veya sınırsız kez eşleşir .
  • (?!src)Dize emin olur Negatif ilerleme olduğunu srcedilir DEĞİL eşleşti.
  • İkinci yakalama grubu bir ile sınırsız zaman arasında ([\w\-])+herhangi [a-zA-Z0-9_]birini arar ve açgözlüdür (mümkün olduğu kadar çok bulur) ve etiket çifti \-içinde bir yerde bulunması durumunda, kısa bir tireye bakıyor <img>.
  • =Eşittir işaretiyle için değişmez aramasıdır.
  • Üçüncü yakalama grubu, ([\"\'])[^\"\']+\3bir tekli veya ikili teklifi, sonra herhangi bir şeyi BUT bir tekli veya ikili teklifi (bir veya daha fazla kez) \3eşleştirmeyi ve ardından üçüncü yakalama grubu olarak bulunan herhangi bir eşleşmeyi (bir veya ikili teklifi) eşleştirir. .)
  • Sonunda \s*herhangi bir boşluk karakteriyle [\r\n\t\f ]sıfır veya sınırsız kez \/?eşleşir , tam olarak bir kez öne eğik çizgi ile eşleşir >ve tüm ilişkinin kapanış dirseğidir.

Regex eğlencelidir. :-)

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.