özel içeriği olan html etiketini eşleştirmek için düzenli ifade

4 Cevap php

Ben bu dize yakalamak için normal bir ifade yazmak çalışıyorum:

<td style="white-space:nowrap;">###.##</td>

I can't even match it if include the string as it is in the regex pattern! I am using preg_match_all(), however, I am not finding the correct pattern. I am thinking that "white-space:nowrap;" is throwing off the matching in some way. Any idea? Thanks ...

4 Cevap

Yerine neden DOM belgesini kullanarak denemiyorsunuz? Sonra HTML düzgün biçimlendirilmiş olması konusunda endişelenmenize gerek yok. Dom Doc koleksiyonunu kullanarak da okunabilirliği artırmak ve ziyade kullanıcı uzayda yaşayan PHP Core onun bir parçası bu yana hızlı performans sağlayacak

Düzenli ifadeler ile ilgili sorunlar yaşıyorum, ben aşağıdaki web sitelerinden biri ile gerçek zamanlı olarak test etmek ister:

Herhangi bir uyarı gördün mü? Sen td yakın etiketinden önce bunun bazı bit, yani / kaçmak zorunda. Bu benim için çalışmak gibiydi:

$string='cow cow cow    <td style="white-space:nowrap;">###.##</td> cat cat cat cat';
php > preg_match_all('/<td style="white-space:nowrap;">###\.##<\/td>/',$string,$result);
php > var_dump($result);
array(1) {
  [0]=>
  array(1) {
    [0]=>
    string(43) "<td style="white-space:nowrap;">###.##</td>"
  }
}

PHP'nin preg_ fonksiyonların herhangi regex argüman çift ayrılmış olması gerektiğini biliyor musunuz? Örneğin:

preg_match_all(`'/foo/'`, $target, $results)

'...' ve string ayırıcılar, /.../ ve regex sınırlayıcıları ve ifadenin are foo. Regex ayırıcısını bölü olmak zorunda değilsiniz, onlar sadece maç var; bazı popüler seçeneklerdir #...#, %...% ve ~...~. Ayrıca, {...}, (...) gibi parantez karakter dengeli çift, [...], ve <...> olabilir; bu çok daha az popüler, ve iyi bir nedenle içindir.

Eğer regex sınırlayıcılarınıda bırakırsanız, regex-derleme faz muhtemelen başarısız olur ve hata mesajı muhtemelen hiçbir mantıklı olacaktır. Örneğin, bu kod:

preg_match_all('<td style="white-space:nowrap;">###.##</td>', $s, $m)

... Bu mesaj oluşturacaktır:

 Unknown modifier '#'

Bu regex ayraç olarak köşeli parantez ilk çift kullanmaya çalışır, ve durum-duyarsız için regex düzenleyiciler (örneğin, i gibi >, aşağıdaki neyse, {[(2) }] satırlı için). Bunu gidermek için bunu gibi, real regex ayraçları eklemek istiyorum:

preg_match_all('%<td style="white-space:nowrap;">###\.##</td>%i', $s, $m)

Sınırlayıcı seçimi kişisel tercih ve kolaylık bir konudur. I # veya / kullanılmış olsaydı, ben gerçek regex bu karakterleri kaçmak zorunda kalacaktı. Bir regex metakarakterdir çünkü ben . kaçtı. Son olarak, düzenleyiciler ve HTML isn't harf duyarlı çünkü kullanımını göstermek için i değiştirici ekledi.