Yalnızca harfleri eşleştirmek için normal ifade


374

Yalnızca harflerle eşleşen bir normal ifadeyi nasıl yazabilirim?


58
Tanımı ne characters? ASCII? Kanji? Iso-XXXX-X? UTF8?
Ivo Wetzel

45
Tanımı ne regex? Perl? Emacs? Grep?
Pascal Cuoq

4
Sorunun İngilizce, İngilizce bir sitede olduğu düşünüldüğünde, sorunun İngilizce karakterler ile ilgili olduğunu varsaymak adil olur.
vaer-k

1
Unicode için bir harf ve / u bayrağının \ p {L}/\p{L}+/u
ifadesinin

4
Given that the question is in English, on an English site, it's fair to assume the question regards characters in English. Bu doğru. Hepimizin bildiği gibi, İngilizce konuşanlar ASLA uygulamalarını yerelleştirmez!
Alex

Yanıtlar:


392

Bir karakter seti kullanın: [a-zA-Z]A – Z'den bir harf küçük ve büyük harfle eşleşir. [a-zA-Z]+bir veya daha fazla harfle ^[a-zA-Z]+$eşleşir ve yalnızca yalnızca bir veya daha fazla harf içeren dizelerle eşleşir ( ^ve $sırasıyla bir dizenin başlangıcını ve sonunu işaretler).

A-Z'ye dışındaki harfleri eşleştirmek isterseniz, ya karakter kümesine ekleyebilirsiniz: [a-zA-ZäöüßÄÖÜ]. Veya Unicode karakter özelliği sınıfı gibi, \p{L}harf olan Unicode karakterleri tanımlayan önceden tanımlanmış karakter sınıflarını kullanırsınız .


119
Bu çok ASCII merkezli bir çözüm. Bu hemen hemen İngilizce olmayan metinleri kıracaktır.
Joachim Sauer

7
@Joachim Sauer: Latince olmayan karakterler kullanarak dilleri kırmayı tercih eder.
Gumbo

15
Zaten Almanca metnin% 90'ını kırıyor, Fransızca veya İspanyolca'dan bile bahsetme. İtalyan yine de oldukça iyi yapabilir.
Ivo Wetzel

9
Hangi "latin karakteri" tanımını seçtiğinize bağlıdır. J, U, Ö, Ä tanımınıza bağlı olarak hepsi latin karakterleri olabilir veya olmayabilir. Ama hepsi yazmak için "latin alfabesini" kullanan dillerde kullanılıyor.
Joachim Sauer

9
\ p {L} tüm umlauts sedilla aksanları vb ile eşleşir, bu yüzden buna devam etmelisiniz.
Radu Simionescu

198

\p{L} Latin harflerinin ötesindeki alfabelerle ilgileniyorsanız Unicode harfiyle eşleşen her şeyi eşleştirir


2
tüm regex tatlar değil. Örneğin, vim normal ifadeleri \p"Yazdırılabilir karakter" olarak kabul edilir.
Philip Potter

3
bu sayfada yalnızca java, .net, perl, jgsoft, XML ve XPath normal ifadeleri destekleniyor \ p {L}. Ancak büyük eksiklikler: python ve ruby ​​(python regex modülüne sahip olsa da).
Philip Potter

6
@Philip Potter: Ruby, aynı söz dizimini kullanarak Unicode karakter özelliklerini destekler.
Jörg W Mittag

6
Bunun \p{L}\p{M}*+birden fazla kod noktasından oluşan harfleri, örneğin aksan işaretlerini izleyen harfleri kapsaması gerektiğini düşünüyorum . Gereğince regular-expressions.info/unicode.html
ZoFreX

python 3 ile bu bir hata verirbad escape \p at position 0
matanster

46

"Karakter" anlamınıza bağlı olarak:

[A-Za-z]- tüm harfler (büyük ve küçük harf)

[^0-9] - rakam olmayan tüm karakterler


Lettters demek istedim. Yine de çalışıyor gibi görünmüyor. preg_match ('/ [a-zA-Z] + /', $ ad);
Nike

[A-Za-z] sadece kullanabileceğiniz karakterlerin beyanıdır. Yine de bu bildirimin ne kadar kullanılmasının gerektiğini belirtmeniz gerekir: [A-Za-z] {1,2} (1 veya 2 harfle eşleşecek şekilde) veya [A-Za-z] {1, *} (eşleşecek 1 veya daha fazla harf)
KristofMols

17
à, á, ã, Ö, Ä ... harfler de, so, আ, ই, ঈ, Є, Ж, З,,, ﺥ, ﺩ א, ב, ג, ש, ת, ... en.wikipedia.org/wiki/Letter_%28alphabet%29
phuclv

@phuclv: Aslında, bu kodlamaya bağlıdır ve kodlama program ayarlarının bir parçasıdır (varsayılan yapılandırma veya programın yapılandırma dosyasında bildirilen kod). Farklı dillerde çalıştığımda, bunu bir sabit dosyada, bir yapılandırma dosyasında saklardım.
Catalina Chircu

1
@CatalinaChircu kodlaması burada kesinlikle önemsizdir. Kodlama, ikili bir karakter kümesindeki bir kod noktasını kodlamanın bir yoludur, örneğin UTF-8, Unicode için bir kodlamadır. OTOH harfleri dile bağlıdır ve eğer biri [A-Za-z]harf ise, o zaman kullanılan dil belirtilmelidir
phuclv

32

Mevcut en yakın seçenek

[\u\l]+

büyük ve küçük harflerden oluşan bir sıra ile eşleşir. Ancak, tüm editörler / diller tarafından desteklenmediğinden, kullanımı daha güvenlidir

[a-zA-Z]+

diğer kullanıcıların önerdiği gibi


1
Yine de hiçbir özel karakterle eşleşmeyecek.
Nyerguds

20

Kullanırdın

/[a-z]/gi

[] - verilen girişler arasındaki karakterleri kontrol eder

az --- tüm alfabeyi kapsar

tüm dizede global olarak g -----

i ----- büyük ve küçük harf almak


14

Birkaç kişinin "/ ^ [a-zA-Z] $ / i" olarak yazdığı normal ifade doğru değildir çünkü en sonunda / i'den büyük / küçük harfe duyarlı olmayan ve ilk kez eşleştirdikten sonra geri dönecektir. / İ yerine sadece global olan / g kullanın ve ayrıca başlangıç ​​ve bitiş için ^ $ koymanız gerekmez .

/[a-zA-Z]+/g
  1. [a-z _] + aşağıdaki listede bulunan tek bir karakterle eşleşir
  2. Nicelik belirteci: + Mümkün olduğunca çok kez, bir ve sınırsız kez, gerektiği kadar geri verme
  3. a ve z arasındaki tek bir karakter az (büyük / küçük harfe duyarlı)
  4. AZ A ve Z arasındaki tek bir karakter (büyük / küçük harfe duyarlı)
  5. g değiştirici: global. Tüm maçlar (ilk maçta geri dönme)

13

Java:

String s= "abcdef";

if(s.matches("[a-zA-Z]+")){
     System.out.println("string only contains letters");
}

4
gibi aksan işaretleri içermezŹŻŚĄ
karoluS



7

Karakter gruplarını kullanma

\D

0-9 arasındaki rakamlar dışında herhangi bir karakterle eşleşir

^\D+$

Buradaki örneğe bakın


8
Bu aynı zamanda sorunun istediği gibi görünmeyen boşluk, semboller vb ile de eşleşecektir.
DaveMongoose

Tuhaf. Bu konuda bir intikam aldım ve o ben değilim!
Dave Everitt

6

Sadece \wveya kullanın [:alpha:]. Yalnızca sözcüklerde görünebilen sembollerle eşleşen bir kaçış dizisidir.


9
\wher durumda iyi bir çözüm olmayabilir. En azından PCRE'de \wdiğer karakterlerle de eşleşebilir. PHP kılavuzundan alıntı : " Bir" kelime "karakteri herhangi bir harf ya da rakam ya da alt çizgi karakteri, yani Perl kelimesinin bir parçası olabilecek herhangi bir karakterdir. Harf ve rakamların tanımı PCRE'nin karakter tabloları tarafından kontrol edilir, ve yerel ayara özgü eşleştirme yapılıyorsa değişebilir. Örneğin, "fr" (Fransızca) yerel ayarında, aksanlı harfler için 128'den büyük bazı karakter kodları kullanılır ve bunlar \ w ile eşleştirilir .
Amal Murali

kelimeler harflerden diğer karakterleri içerir
V-SHY

2
\wmaç harfleri ve sayıları anlamına gelir
Eugen Konkov

4

Herhangi bir karakter kodlamasındaki herhangi bir harfi kastediyorsanız, boşluk \s, rakam \dve diğer özel karakterleri silmek için iyi bir yaklaşım olabilir :

[!@#\$%\^&\*\(\)\[\]:;'",\. ...more special chars... ]

Veya herhangi bir harfi doğrudan tanımlamak için yukarıdaki olumsuzlamanın olumsuzlanmasını kullanın:

\S \D and [^  ..special chars..]

Artıları:

  • Tüm normal reçineler ile çalışır.
  • Yazması kolay, bazen çok zaman kazanın.

Eksileri:

  • Uzun, bazen mükemmel değil, ancak karakter kodlaması da kırılabilir.

4

Şu normal ifadeyi deneyebilirsiniz: [^\W\d_]veya [a-zA-Z].


Yani ne değildir [^\W|\d]vasıta
OGHaza

1
[^\W|\d]anlamına gelir \Wve |değil \d. O zamandan beri aynı net etkiye sahiptir |parçasıdır \Wama |sen öyle düşünüyorum çalışmaz. O zaman bile bu _karakteri kabul ettiği anlamına gelir . Muhtemelen arıyoruz[^\W\d_]
OGHaza

Sana katılıyorum, kabul ediyor _. Ancak "NOT" |, "AND" değerine eşittir, yani [^\W|\d]: NOT \W AND NOT\d
Motlab

12
[^ab]anlamına gelir ave b. [^a|b]anlamına gelir ave |değil b. İkinci bir örnek vermek gerekirse [a|b|c|d]tam olarak aynı olduğu [abcd|||]tam olarak aynı olan [abcd|]her biri denk - bir sabit karakter değil, bir OR operatörüdür. OR işleci, bir karakter sınıfındaki her karakter arasında ima edilir ve sınıfın (dikey çizgi) karakterini kabul etmesini istediğiniz gerçek bir yol sağlar . ([a]|[b]|[c]|[d]|[|])|||
OGHaza

1

Son zamanlarda bu deseni formlarımda harf, boşluk ve aksan işaretleri gibi özel karakterler içeren insanların adlarını kontrol etmek için kullandım.

pattern="[A-zÀ-ú\s]+"

Bir ASCII tablosuna bakmalısınız. A-zsadece harflerden daha fazla eşleşirÀ-ú
Toto

0

desen = / [a-zA-Z] /

"[a-zA-Z]: # {pattern.match (" mayın çiçeği ")}" Tamam

"[a-zA-Z]: # {pattern.match (" 456 ")}"

"[a-zA-Z]: # {pattern.match (" ")}"

"[a-zA-Z]: # {pattern.match (" # $% ^ & * ")}"

"[a-zA-Z]: # {pattern.match (" # $% ^ & * A ")}" Tamam


3
Örneğin “Zażółć gęslą jaźń” ne olacak?
Şahit

-2
Pattern pattern = Pattern.compile("^[a-zA-Z]+$");

if (pattern.matcher("a").find()) {

   ...do something ......
}
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.