Temel php regex soru

4 Cevap php

Ben bu iki etiketleri içindeki tüm metni almak istiyorum bir html dosyası var:

<div class="articleTitle">
</div>

I'm not entirely sure how to do the php regex. (I also know there are no html tags inside the div, so there's no problem about nested tags)

Güncelleme: Uyarı: preg_match () [function.preg-match]: hat 29 Bilinmeyen değiştirici 'd' i verilen çözümleri çalıştığınızda i bu olsun

4 Cevap

preg_match('/<div class="articleTitle">(.*?)<\/div>/i', $source, $matches);
print_r($matches);

Bu RegexBuddy gelen "explination" dir:

<div class="articleTitle">(.*?)</div>

Options: case insensitive

Match the characters “<div class="articleTitle">” literally «<div class="articleTitle">»
Match the regular expression below and capture its match into backreference number 1 «(.*?)»
   Match any single character that is not a line break character «.*?»
      Between zero and unlimited times, as few times as possible, expanding as needed (lazy) «*?»
Match the characters “</div>” literally «</div>»

Created with RegexBuddy

(. *?) Ondan sonra gelir ne kadar daha önce ne gelir arasındaki her şeyi ele geçirecek, ve $ var eşleşen içine yerler olacak.

Ben HTML $ kaynak var içinde olacağı varsayılmıştır.

Sana RegexBuddy, bu 39.95 bulunuyor (USD) içine bakmak ama her kuruşa değer olduğunu göstermektedir. Çoğu her büyük RegEx uygulanması ile RegExs oluşturmanıza yardımcı olabilir, ve size RegEx öğrenmek için yardımcı olabilir

Yanlış cevaplar!

preg_match('#<div\s+[^>]*class="articleTitle"[^>]*>(.*)</\s*div>#ims', $str, $matches);
  1. DIV boş olabilir, yani (. +) Gibi pattrns yanlış.
  2. Eğer "m" değiştirici kullanmak shold - içerik satırlı olabilir.
  3. Eğer yeni satır olarak nokta-metakarakteri maç için "s" değiştirici kullanmalısınız.
  4. Sadece php nalın HERHANGİ sınırlayıcı olabilir, neden eğik çizgi kaçış, merak ediyorum? Genellikle bu durumda sınırlayıcı olarak kullanmak #.
  5. DIV ek özellikler ve / veya (satırsonu dahil) boşluk karakterleri olabilir.

Üzgünüz, desen iyi test etmek için hiçbir zaman var, ama bu doğru gibi görünüyor. Bu, her durumda çalışması gerekir.

PS: ve, GONeale, hırs ile ilgili - desen açgözlü olmalı ve değiştirici "U" olmadan açgözlü IS.

Diğer çözümler muhtemelen istenmeyen olduğu, kendisi tarafından

maç gibi bu, daha doğru olurdu?

preg_match('<div class="articleTitle">(.+?)</div>', $test_string, $matches);
'/<div class="articleTitle">(.*?)<\/div>/'

Genellikle işe yarardı; Eğer dikkate div etiketinde diğer olası özelliklerini almak gerekiyorsa, ancak, biraz daha karmaşık olacaktır.