Düzenli ifadeler kullanarak nokta maç satır karakterleri nasıl yapılır

4 Cevap php

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?

4 Cevap

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.

Eğer bu hile kullanmak tüm karakterleri eşleştirmek için:

%\<div\>([\s\S]*)\</div\>%

Bu nokta satır karakterleri eşleşmesi gerekir bunu anlatmak için düzenli ifade derleyici bir bayrak genellikle yoktur.

Bu eski bir biri olduğunu biliyorum, ama son zamanlarda genelinde tökezledi beri. Da kullanabilirsiniz (?s) mode modifier. Örneğin

(?s)/<div>(.*?)<\/div>