Aranacak dan Highlite sözler

2 Cevap php

Ben çalışıyor ve kelimeler vurgulu olsun, bir müşteri için küçük bir arama senaryo yazdı, ANCAK ...

Bu durum hayal edin:

arama terimi: test

Bulunan sonuç: Hello this <a href="/news/this-is-a-test">is a test</a>

Bu örnekte href kısmında ve <a> etiketleri arasında hem 'test' bağını koparmadan, vurgulu olsun.

Bunu nasıl önleyebilir?

Edit:

Yani bu ne gerek: Bir regex bir href niteliği içinde bulunan olanlar hariç tüm eşleşen arama dizeleri değiştirir işlevini yerine

2 Cevap

Anladım!

$body = $row['body'];
$pattern = "/".$search_string."(?!([^<]+)?>)/i";
$replacement = "<strong class='highlite'>".$search_string."</strong>";
$altered_body = preg_replace($pattern, $replacement, $body);

print($altered_body);

Düzenli ifadeler ile XML Ayrıştırma olamaz. : Hala birçok durumda çalışan kirli bir regex çözüm istiyorsanız (bu regex deneyebilirsiniz.

">[^<]*?(test)"

İlk kuşak kapanış etiketi için bakmak ve başka hiçbir etiket arasına açılmış olduğundan emin olun daha.

İdeal HTML ayrıştırmak ve bunun sadece metinsel parçaları değiştirmek istiyorum.