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.
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
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
[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)
@ 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
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
[a-z _] + cocok dengan satu karakter yang ada dalam daftar di bawah ini
Kuantifikasi: + Antara waktu satu dan tidak terbatas, sebanyak mungkin, memberikan kembali sesuai kebutuhan
az karakter tunggal dalam kisaran antara a dan z (case sensitif)
AZ karakter tunggal dalam kisaran antara A dan Z (case sensitive)
g modifier: global. Semua pertandingan (jangan kembali pada pertandingan pertama)
\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.
[^\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 \WDAN 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.
characters
? ASCII? Kanji? Iso-XXXX-X? UTF8?regex
? Perl? Emacs? Grep?/\p{L}+/u
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!Jawaban:
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.sumber
\p{L}
cocok dengan apa pun yang merupakan huruf Unicode jika Anda tertarik pada huruf di luar huruf Latinsumber
\p
sebagai "Karakter yang dapat dicetak".\p{L}\p{M}*+
mencakup surat yang terdiri dari beberapa codepoint, misalnya surat yang diikuti oleh tanda aksen. Sebagai per regular-expressions.info/unicode.htmlbad escape \p at position 0
Tergantung pada makna "karakter" Anda:
sumber
[A-Za-z]
huruf maka bahasa yang digunakan harus ditentukanOpsi terdekat yang tersedia adalah
yang cocok dengan urutan huruf besar dan kecil. Namun, ini tidak didukung oleh semua editor / bahasa, jadi mungkin lebih aman untuk digunakan
seperti yang disarankan pengguna lain
sumber
Anda akan menggunakannya
[] - 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
sumber
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.
sumber
Jawa:
sumber
ŹŻŚĄ
Contoh super sederhana. Ekspresi reguler sangat mudah ditemukan online.
http://www.regular-expressions.info/reference.html
sumber
Untuk PHP, mengikuti akan berfungsi dengan baik
sumber
Gunakan grup karakter
Cocok dengan karakter apa pun kecuali digit 0-9
Lihat contoh di sini
sumber
Cukup gunakan
\w
atau[:alpha:]
. Ini adalah urutan pelarian yang hanya cocok dengan simbol yang mungkin muncul dalam kata-kata.sumber
\w
mungkin bukan solusi yang baik dalam semua kasus. Setidaknya di PCRE,\w
bisa 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. ".\w
berarti huruf dan angka yang cocokJika 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:Atau gunakan negasi dari negasi di atas untuk secara langsung menggambarkan surat apa pun:
Pro:
Cons:
sumber
Anda dapat mencoba ungkapan reguler ini:
[^\W\d_]
atau[a-zA-Z]
.sumber
[^\W|\d]
artinya[^\W|\d]
artinya tidak\W
dan tidak|
dan tidak\d
. Ini memiliki efek bersih yang sama karena|
merupakan bagian dari\W
tetapi|
tidak berfungsi seperti yang Anda pikirkan. Itupun berarti itu menerima_
karakter. Anda mungkin mencari[^\W\d_]
_
. Tapi "TIDAK"|
sama dengan "DAN", jadi[^\W|\d]
artinya: TIDAK\W
DAN TIDAK\d
[^ab]
artinya tidaka
dan tidakb
.[^a|b]
artinya tidaka
dan tidak|
dan tidakb
. 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).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.
sumber
A-z
cocok lebih dari sekedar huruf, dan jugaÀ-ú
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
sumber
sumber