Regex hanya untuk mencocokkan huruf


374

Bagaimana saya bisa menulis regex yang hanya cocok dengan huruf?


58
Apa definisi Anda characters? ASCII? Kanji? Iso-XXXX-X? UTF8?
Ivo Wetzel

45
Apa definisi Anda regex? Perl? Emacs? Grep?
Pascal Cuoq

4
Mengingat bahwa pertanyaannya adalah dalam bahasa Inggris, di situs bahasa Inggris, wajar saja untuk menganggap pertanyaan tersebut mengenai karakter dalam bahasa Inggris.
vaer-k

1
Saya perhatikan bahwa \ p {L} untuk huruf dan / u flag untuk Unicode cocok dengan huruf apa pun di regex saya/\p{L}+/u
MaxZoom

4
Given that the question is in English, on an English site, it's fair to assume the question regards characters in English. Ini benar. Seperti kita ketahui, penutur bahasa Inggris TIDAK PERNAH melokalisasi aplikasi mereka!
Alex

Jawaban:


392

Gunakan rangkaian karakter: [a-zA-Z]cocok dengan satu huruf dari A – Z dalam huruf kecil dan besar. [a-zA-Z]+cocok dengan satu atau lebih huruf dan ^[a-zA-Z]+$hanya cocok string yang terdiri dari satu atau lebih huruf saja ( ^dan $tandai masing-masing awal dan akhir string).

Jika Anda ingin mencocokkan huruf selain A – Z, Anda dapat menambahkannya ke rangkaian karakter: [a-zA-ZäöüßÄÖÜ] . Atau Anda menggunakan kelas karakter yang telah ditentukan seperti kelas properti karakter Unicode\p{L} yang menjelaskan karakter Unicode yang berupa huruf.


119
Itu solusi yang sangat ASCII-sentris. Ini akan memecah hampir semua teks non-Inggris.
Joachim Sauer

7
@ Joachim Sauer: Ini lebih baik pada bahasa yang menggunakan karakter non-latin.
Gumbo

15
Sudah mencapai 90% dari teks bahasa Jerman, bahkan tidak menyebutkan Perancis atau Spanyol. Italia mungkin masih cukup baik.
Ivo Wetzel

9
itu tergantung pada definisi "karakter latin" yang Anda pilih. J, U, Ö, Ä semuanya dapat diperdebatkan sebagai karakter latin atau tidak, berdasarkan definisi Anda. Tetapi mereka semua digunakan dalam bahasa yang menggunakan "alfabet latin" untuk menulis.
Joachim Sauer

9
\ p {L} cocok dengan semua aksen sedilla umlaut dll, jadi Anda harus melakukannya.
Radu Simionescu

198

\p{L} cocok dengan apa pun yang merupakan huruf Unicode jika Anda tertarik pada huruf di luar huruf Latin


2
tidak dalam semua rasa regex. Misalnya, vim regex memperlakukan \psebagai "Karakter yang dapat dicetak".
Philip Potter

3
halaman ini hanya menyarankan dukungan regex java, .net, perl, jgsoft, XML dan XPath \ p {L}. Tetapi kelalaian utama: python dan ruby ​​(meskipun python memiliki modul regex).
Philip Potter

6
@Philip Potter: Ruby mendukung properti karakter Unicode menggunakan sintaks yang sama persis.
Jörg W Mittag

6
Saya pikir ini harus \p{L}\p{M}*+mencakup surat yang terdiri dari beberapa codepoint, misalnya surat yang diikuti oleh tanda aksen. Sebagai per regular-expressions.info/unicode.html
ZoFreX

dengan python 3 ini menghasilkan kesalahanbad escape \p at position 0
matanster

46

Tergantung pada makna "karakter" Anda:

[A-Za-z]- semua huruf (huruf besar dan kecil)

[^0-9] - semua karakter non-digit


Maksud saya lettters. Tampaknya tidak berfungsi. preg_match ('/ [a-zA-Z] + /', $ name);
Nike

[A-Za-z] hanyalah deklarasi karakter yang dapat Anda gunakan. Anda masih harus menyatakan berapa kali deklarasi ini harus digunakan: [A-Za-z] {1,2} (untuk mencocokkan 1 atau 2 huruf) atau [A-Za-z] {1, *} (untuk mencocokkan 1 atau lebih surat)
KristofMols

17
yah à, á, ã, Ö, Ä ... juga huruf, demikian juga অ, আ, ই, ঈ, Є, Ж, З, З, ﺡ, ﺥ, ﺩ א, ב, ג, ג, ש, ת, ... en.wikipedia.org/wiki/Letter_%28alphabet%29
phuclv

@ phuclv: Memang, tapi itu tergantung pada encoding, dan encoding adalah bagian dari pengaturan program (baik konfigurasi default atau yang dideklarasikan dalam file konfigurasi program). Ketika saya bekerja pada bahasa yang berbeda, saya biasa menyimpannya dalam konstanta, dalam file konfigurasi.
Catalina Chircu

1
Pengkodean @CatalinaChircu benar-benar tidak relevan di sini. Pengkodean adalah cara untuk menyandikan titik kode dalam karakter yang diatur dalam biner, misalnya UTF-8 adalah pengodean untuk Unicode. Surat OTOH tergantung pada bahasanya, dan jika seseorang mengatakan [A-Za-z]huruf maka bahasa yang digunakan harus ditentukan
phuclv

32

Opsi terdekat yang tersedia adalah

[\u\l]+

yang cocok dengan urutan huruf besar dan kecil. Namun, ini tidak didukung oleh semua editor / bahasa, jadi mungkin lebih aman untuk digunakan

[a-zA-Z]+

seperti yang disarankan pengguna lain


1
Tidak akan cocok dengan karakter khusus apa pun.
Nyerguds

20

Anda akan menggunakannya

/[a-z]/gi

[] - memeriksa karakter apa pun di antara input yang diberikan

az --- mencakup seluruh alfabet

g ----- secara global di seluruh string

saya ----- mendapatkan huruf besar dan kecil


14

Ekspresi reguler yang ditulis oleh beberapa orang sebagai "/ ^ [a-zA-Z] $ / i" tidak benar karena pada akhirnya mereka menyebutkan / i yang untuk case-sensitive dan setelah pencocokan untuk pertama kalinya akan kembali kembali. Alih-alih / i hanya menggunakan / g yang untuk global dan Anda juga tidak perlu menaruh ^ $ untuk memulai dan mengakhiri.

/[a-zA-Z]+/g
  1. [a-z _] + cocok dengan satu karakter yang ada dalam daftar di bawah ini
  2. Kuantifikasi: + Antara waktu satu dan tidak terbatas, sebanyak mungkin, memberikan kembali sesuai kebutuhan
  3. az karakter tunggal dalam kisaran antara a dan z (case sensitif)
  4. AZ karakter tunggal dalam kisaran antara A dan Z (case sensitive)
  5. g modifier: global. Semua pertandingan (jangan kembali pada pertandingan pertama)

13

Jawa:

String s= "abcdef";

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

4
itu tidak termasuk tanda-tanda diakritik sepertiŹŻŚĄ
karoluS



7

Gunakan grup karakter

\D

Cocok dengan karakter apa pun kecuali digit 0-9

^\D+$

Lihat contoh di sini


8
Ini juga akan cocok dengan spasi putih, simbol, dll. Yang sepertinya bukan pertanyaan yang diajukan.
DaveMongoose

Aneh. Baru saja downvote tentang ini, dan itu bukan aku!
Dave Everitt

6

Cukup gunakan \watau [:alpha:]. Ini adalah urutan pelarian yang hanya cocok dengan simbol yang mungkin muncul dalam kata-kata.


9
\wmungkin bukan solusi yang baik dalam semua kasus. Setidaknya di PCRE, \wbisa cocok dengan karakter lain juga. Mengutip manual PHP : " Karakter" kata "adalah huruf atau digit atau karakter garis bawah, yaitu, karakter apa pun yang dapat menjadi bagian dari" kata "Perl. Definisi huruf dan angka dikontrol oleh tabel karakter PCRE, dan dapat bervariasi jika pencocokan khusus lokal terjadi. Misalnya, di lokal "fr" (Prancis), beberapa kode karakter yang lebih besar dari 128 digunakan untuk huruf beraksen, dan ini dicocokkan dengan \ w. ".
Amal Murali

kata-kata termasuk karakter lain dari surat
V-SHY

2
\wberarti huruf dan angka yang cocok
Eugen Konkov

4

Jika Anda bermaksud huruf apa pun dalam pengkodean karakter apa pun, maka pendekatan yang baik mungkin untuk menghapus non-huruf seperti spasi \s, angka \d, dan karakter khusus lainnya seperti:

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

Atau gunakan negasi dari negasi di atas untuk secara langsung menggambarkan surat apa pun:

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

Pro:

  • Bekerja dengan semua rasa regex.
  • Mudah menulis, terkadang menghemat banyak waktu.

Cons:

  • Panjang, terkadang tidak sempurna, tetapi pengkodean karakter dapat rusak juga.

4

Anda dapat mencoba ungkapan reguler ini: [^\W\d_]atau [a-zA-Z].


Bukan itu [^\W|\d]artinya
OGHaza

1
[^\W|\d]artinya tidak \Wdan tidak |dan tidak \d. Ini memiliki efek bersih yang sama karena |merupakan bagian dari \Wtetapi |tidak berfungsi seperti yang Anda pikirkan. Itupun berarti itu menerima _karakter. Anda mungkin mencari[^\W\d_]
OGHaza

Saya setuju dengan Anda, ia menerima _. Tapi "TIDAK" |sama dengan "DAN", jadi [^\W|\d]artinya: TIDAK \W DAN TIDAK\d
Motlab

12
[^ab]artinya tidak adan tidak b. [^a|b]artinya tidak adan tidak |dan tidak b. Untuk memberikan contoh kedua [a|b|c|d]adalah persis sama seperti [abcd|||]yang persis sama seperti [abcd|]- yang semuanya menyamakan ([a]|[b]|[c]|[d]|[|])yang |adalah karakter literal, bukan operator OR. Operator ATAU tersirat di antara setiap karakter dalam kelas karakter, dengan meletakkan |sarana aktual yang Anda inginkan agar kelas menerima karakter |(pipa).
OGHaza

1

Akhir-akhir ini saya menggunakan pola ini dalam formulir saya untuk memeriksa nama-nama orang, yang berisi huruf, kosong, dan karakter khusus seperti tanda aksen.

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

Anda harus melihat tabel ASCII. A-zcocok lebih dari sekedar huruf, dan jugaÀ-ú
Toto

0

pattern = / [a-zA-Z] /

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

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

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

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

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


3
Dan bagaimana dengan misalnya, “Zażółć gęslą jaźń”?
Saksi

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

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

   ...do something ......
}
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.