Düzenli İfadeler - Her Şeyi Eşleştir


278

Kesinlikle herhangi bir şeyle (beyaz boşluklar dahil) eşleşmesi için nasıl bir ifade yapabilirim?
Misal:

Regex: _____ koyun aldım.

Kibrit: Koyun aldım. Bir koyun aldım. Beş koyun aldım.

Kullanmayı denedim (.*), ama bu işe yaramıyor gibi görünüyor.

Güncelleme: İşe yaradım, görünüşe göre sorun normal ifadelerde değil, sadece (.) Karakterlerden kaçılıyor.


27
.*çalışmalı. Gerçek kodunuzu yapıştırabilir misiniz?
Jacob Eggers

2
Hangi dilde kod yazıyorsunuz?
Ziggy

9
bir nokta bir satırsonu ile eşleşmeyecek
zee

Yanıtlar:


293

Normalde nokta, yeni satırlar dışındaki herhangi bir karakterle eşleşir .

Bu nedenle .*çalışmıyorsa, "nokta da yeni satırlarla eşleşir" seçeneğini ayarlayın (veya kullanın (?s).*).

"Dotall" seçeneği olmayan JavaScript kullanıyorsanız, deneyin [\s\S]*. Bu, "boşluk veya boşluk olmayan herhangi bir sayıda karakteri eşleştir" - etkin bir şekilde "herhangi bir dizeyle eşleşir" anlamına gelir.

Yalnızca JavaScript için çalışan (ve başka herhangi bir normal ifade tadı tarafından tanınmayan) başka bir seçenek [^]*de herhangi bir dizeyle eşleşir. Ama [\s\S]*belki de daha taşınabilir olduğu için daha yaygın olarak kullanılıyor gibi görünüyor.


7
.*eşleşmiyor \nancak yalnızca \n0 karakterle eşleştiği için bir dizeyi işliyor .
Toto

1
Javascript kullanıyorsanız, bu desene bir değişken ayarlarken eğik çizgiyi kesmeyi unutmayın; örneğin: var pattern = "[\\ s \\ S] *";
Astra Bear

(?s).*benim için işler yeni hat dahil her şeyle eşleşti
Gujarat Santana

1
/ [\ S \ S] * / kullanılan bir SORUN var. Kodunuzda kullanırsanız ve daha sonra sözdizimi hatasına neden olan bir kodun yorumunu yaparsanız, kalıbın sonu yorumun sonu anlamına gelir. Daha sonra, çalışmasını sağlamak için bu kalıbı açıklamalı koddan kaldırmanız gerekir. Ama sonra tekrar yorumunu kaldırırsanız, artık işe yaramaz veya eskisi gibi çalışamaz ve olması gerekir.
Panu Logic

Bu, yıldız işaretiyle biten herhangi bir normal ifade için geçerli olacaktır. Elbette ya sonradan *(olduğu gibi /.*(?:)/) bir şey ekleyerek ya da regex yapıcısını ( var foo = new RegExp(".*")) kullanarak kaçınmak kolaydır .
Tim Pietzcker

177

(.*?) bir şeyle eşleşiyor - yıllardır kullanıyorum.


61
ama bu yeni bir satırla eşleşiyor mu?
ineedahero

Bunu Yüce Metin üzerinde kullandım ve mükemmel çalıştı. Teşekkürler! ("title":".*?")
SCabralO

8
Javascript'te [\s\S]*veya tuşlarını kullanın [^]*.
Jeff Huijsmans

Bilmiyorum ama bu ifadeyi her kullandığımda, kullanım durumum için belirli bir ifade yapmadığım için kendimi suçlu hissediyorum. Eğer diyelim, w+yeterli değil, sonunda kullanıyorum .+. Neyse ki henüz beni ısırmaya gelmedi.
Tushar

Python kullanarak benim için çalışıyor
1919'da suffa

89

Aşağıdakilerden birini seçin ve ezberleyin !!! :)

[\s\S]*
[\w\W]*
[\d\D]*

Açıklama:

\s: boşluk \S: boşluk değil

\w: kelime \W: kelime değil

\d: basamak \D: basamak değil

(Sen alışverişi *için +size 1 veya DAHA karakterleri isterseniz [yerine 0 veya daha fazla]).




İLAVE DÜZENLEME:

Her şeyi tek bir satırda eşleştirmek istiyorsanız, bunu kullanabilirsiniz:

[^\n]+

Açıklama:

^: değil

\n: satır sonu

+: 1 veya daha fazla karakter için




4

Çünkü .yeni satır veya satır sonlandırıcı dışında tek bir karakter bulun.

Yani, herhangi bir şeyi eşleştirmek için şöyle kullanabilirsiniz: (.|\n)*?

Umarım yardımcı olur!


2

(.*?)benim için çalışmıyor. /* */Birden çok satır içerebilir çevrili yorumları eşleştirmeye çalışıyorum .

Bunu dene:

([a]|[^a])

Bu normal ifade aveya ile eşleşir anything else expect a. Kesinlikle, her şeyi eşleştirmek anlamına gelir.

BTW, benim durumumda, /\*([a]|[^a])*/C stili yorumlarla eşleşir.

Daha özlü bir yol için @mpen'e teşekkür ederiz.

[\s\S]

1
JS'de bunu yapmanın en yaygın yolu [\s\S]- yani boşlukları ve boşluk olmayanları eşleştirmektir.
mpen

2

JavaScript için en iyi ve en basit cevap /.*/ gibi görünmektedir.

Başkaları tarafından önerildiği gibi /(.*?)/ de işe yarar ama /.*/ daha basittir. Gördüğüm kadarıyla, sonu ne olursa olsun, desenin içindeki () gerekli değil mi? kesinlikle her şeyi eşleştirmek için (boş dizeler dahil)

OLMAYAN ÇÖZÜMLER:

/ [\ s \ S] / boş dizelerle eşleşmez, bu nedenle çözüm değildir.

/ [\ s \ S] * / DOES da boş dizelerle eşleşir. Ancak bir sorunu var: Kodunuzda kullanırsanız, '* /' yorum sonu olarak yorumlandığından bu kodu yorumlayamazsınız.

/ ([\ s \ S] *) / çalışır ve yorum sorunu yoktur. Ancak, anlaşılması /.*/ 'den daha uzun ve daha karmaşıktır.


BTW. Yukarıdaki kod alıntıları Stack Overflow'un italik olarak cevabımın bir kısmını oluşturmasını sağlıyor, bu benim niyetim değildi.
Panu Logic

1

JavaScript kullanıyorsanız, ES2018 s (dotAll) bayrağı ekledi. İle sbayrak, nokta .herhangi karakterler yeni satır içerir eşleşir.

console.log("line_1\nline_2".match(/.+/s))

Not : Henüz bazı tarayıcılarda desteklenmemektedir.


1

2018 spesifikasyonu, s işaretini (takma ad: dotAll) sağlar, böylece çizgi işaretleri. de dahil olmak üzere herhangi bir karakterle eşleşir:

const regExAll = /.*/s; //notice the 's'

let str = `
Everything
	in 	this
			string
					will
						be
	matched. Including whitespace (even Linebreaks).
`;

console.log(`Match:`, regExAll.test(str)); //true
console.log(`Index Location:`, str.search(regExAll));

let newStr = str.replace(regExAll,"🐔");
console.log(`Replaced with:`,newStr); //Index: 0

Yukarıdaki kod Chrome'da çalışıyor, ancak sbayrak henüz Firefox'ta uygulanmadı, ancak yakında uygulanacak .



0

Kullanmanızı tavsiye ederim /(?=.*...)/g

Misal

const text1 = 'I am using regex';
/(?=.*regex)/g.test(text1) // true

const text2 = 'regex is awesome';
/(?=.*regex)/g.test(text2) // true

const text3 = 'regex is util';
/(?=.*util)(?=.*regex)/g.test(text3) // true

const text4 = 'util is necessary';
/(?=.*util)(?=.*regex)/g.test(text4) // false because need regex in text

Test etmek için regex101 kullanın


0

Dürüstçe cevaplar bir sürü eski böylece sadece sadece karakter içeriği ne olursa olsun herhangi bir dize test eğer "/.*/i" yeterli HERŞEY alırsınız bulundu.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.