Normal karakterler, beyaz charsets arasında ve satır karakterleri içeren bir dize var. Bu düzenli ifade çalışmaz: /<div>(.*)<\/div>. Bu .* satır karakterlerini uymuyor çünkü. Benim sorum bu nasıl, nedir?
Sen DOTALL değiştirici kullanmak gerekir.
'/<div>(.*)<\/div>/s'
Bu açgözlü eşleşen çünkü tam olarak ne istediğinizi size olmayabilir. Bunun yerine, açgözlü olmayan maç deneyebilirsiniz:
'/<div>(.*?)<\/div>/s'
Ayrıca dışında her şeyi eşleştirerek bu çözebileceğini '<' Diğer etiketleri orada değilse:
'/<div>([^<]*)<\/div>/'
Başka bir gözlem Eğer düzenli ifade ayraç olarak / kullanmaya gerek kalmamasıdır. Başka bir karakter kullanarak okunabilirliği artırmak, </div> olarak / kaçmak zorunda değilsiniz demektir. Bu, tüm yukarıdaki normal ifadeler için de geçerlidir. Burada bunun yerine '/' bir '#' kullanırsanız görüneceğini bulunuyor:
'#<div>([^<]*)</div>#'
Ancak bütün bu çözümler sayesinde iç içe divlere, fazladan boşluklar, HTML yorumlar ve diğer çeşitli şeyler başarısız olabilir. HTML Regex ile ayrıştırmak için çok karmaşık olduğunu, bu yüzden bunun yerine bir HTML çözümleyici kullanmayı düşünmelisiniz.
Bu eski bir biri olduğunu biliyorum, ama son zamanlarda genelinde tökezledi beri. Da kullanabilirsiniz (?s) mode modifier. Örneğin
(?s)/<div>(.*?)<\/div>