Soru

etiketi arasındaki tüm karakterleri eşleştirmek için normal ifade


Yüce metin 2 editörü kullanıyorum. Tüm karakterlerin hepsiyle eşleşmesi için regex kullanmak istiyorum h1 etiketleri.

Şu andan itibaren böyle kullanıyorum

<h1>.+</h1>

H1 etiketi kırılmamışsa iyi çalışıyor.

Demek istediğim

<h1>Hello this is a hedaer</h1>

iyi çalışıyor.

Ama etiketi böyle görünüyorsa çalışmıyor

<h1>
   Hello this is a hedaer
</h1>

Birisi bana sözdizimi ile yardım edebilir mi?


16
2018-01-25 15:52


Menşei




Cevaplar:


Varsayılan olarak . yeni satır karakteri dışındaki tüm karakterlerle eşleşir.

Bu durumda, DOTALL seçeneğine ihtiyacınız olacak. . Yeni satır karakteri dahil olmak üzere herhangi bir karakterle eşleşir. DOTALL seçeneği satır içi olarak belirtilebilir (?s). Örneğin:

(?s)<h1>.+</h1>

Bununla birlikte, nicelleştiricinin varsayılan davranışı olduğundan, işe yaramayacağını göreceksiniz. açgözlü (bu durumda onun +), yani olabildiğince çok karakter tüketmeye çalışacağı anlamına gelir. Bunu yapman gerekecek tembel ekstra ekleyerek (mümkün olduğunca az sayıda karakter tüketin) ? niceleyiciden sonra +?:

(?s)<h1>.+?</h1>

Alternatif olarak, regex olabilir <h1>[^<>]*</h1>. Bu durumda, herhangi bir seçenek belirtmeniz gerekmez.


39
2018-01-25 15:54



OP'nin regex'i ile, bu seçenekleri belirtmek yeterli değildir. - nhahtdh
@nhahtdh katılıyorum ... alternatif belirttim .. - Anirudha
@ Some1.Kill.The.DJ Kodunuzu denedim. Ancak, etiket kırılma içerdiğinde hala eşleşmiyor - Giri
@nhahtdh düzenleme için teşekkürler ..;) - Anirudha
H1'de iç içe geçmiş etiketleriniz varsa üçüncü normal gecikme olmaz mı? Açıklık ya da bağlantı ya da herneyse ... Sadece "(? S)" denedim ve yüce işler, bu harika. - enrey


Bu soru en önemli Google sonuçları olduğundan, tüm karakterleri bulmaya çalışan bir regex araması arasında Bir h1 etiketi Ben de bu cevabı vereceğini düşündüm. Aradığım şey buydu.

(?s)(?<=<h1>)(.+?)(?=</h1>)

Böyle bir örnek metin üzerinde kullanılırsa, bu regex <h1>A title</h1> <p>Some content</p> <h1>Another title</h1> sadece geri dönecek A title.


22
2018-05-13 13:38



Bu aynı zamanda (? S) (? <= </ H1>) (. +?) (? = <H1>) gibi ardışık etiketler arasındaki karakterleri temizlemeye de çalışır. - giuseppe