Anda sepertinya salah paham tentang cara kerja definisi kelas karakter di regex.
Untuk cocok dengan string 01
, 02
, 03
, 04
, 05
, 06
, 07
, 08
, 09
, 10
, 11
, atau 12
, seperti karya-karya ini:
0[1-9]|1[0-2]
Referensi
Penjelasan
Kelas karakter, dengan sendirinya, mencoba mencocokkan satu dan tepat satu karakter dari string input. [01-12]
benar-benar mendefinisikan [012]
, kelas karakter yang cocok dengan satu karakter dari input terhadap salah satu dari 3 karakter 0
, 1
atau 2
.
The -
Definisi kisaran pergi dari 1
ke 1
, yang mencakup hanya 1
. Di sisi lain, sesuatu seperti [1-9]
meliputi 1
, 2
, 3
, 4
, 5
, 6
, 7
, 8
, 9
.
Para pemula sering membuat kesalahan dalam mendefinisikan hal-hal seperti [this|that]
. Ini tidak "berhasil". Karakter ini mendefinisikan definisi [this|a]
, yaitu cocok satu karakter dari input terhadap setiap 6 karakter di t
, h
, i
, s
, |
atau a
. Kemungkinan besar (this|that)
itulah yang dimaksudkan.
Referensi
Bagaimana rentang ditentukan
Jadi sekarang jelas bahwa pola suka between [24-48] hours
tidak "berhasil". Kelas karakter dalam kasus ini sama dengan [248]
.
Artinya, -
dalam definisi kelas karakter tidak mendefinisikan rentang numerik dalam pola. Mesin regex tidak benar-benar "memahami" angka dalam pola, dengan pengecualian sintaks pengulangan hingga (misalnya, a{3,5}
cocok antara 3 dan 5 a
).
Definisi rentang malah menggunakan pengkodean karakter ASCII / Unicode untuk menentukan rentang. Karakter 0
dikodekan dalam ASCII sebagai desimal 48; 9
adalah 57. Jadi, definisi karakter [0-9]
mencakup semua karakter yang nilainya antara desimal 48 dan 57 dalam pengkodean. Sebaliknya bijaksana, dengan desain ini adalah karakter 0
, 1
..., 9
.
Lihat juga
Contoh lain: A sampai Z
Mari kita lihat definisi kelas karakter umum lainnya [a-zA-Z]
Di ASCII:
A
= 65, Z
= 90
a
= 97, z
= 122
Artinya:
[a-zA-Z]
dan [A-Za-z]
setara
- Dalam kebanyakan rasa,
[a-Z]
kemungkinan merupakan rentang karakter ilegal
- karena
a
(97) "lebih besar dari" dari Z
(90)
[A-z]
legal, tetapi juga mencakup enam karakter berikut:
[
(91), \
(92), ]
(93), ^
(94), _
(95), `
(96)
Pertanyaan-pertanyaan Terkait
[a-z0-9]
cocok dengan semua huruf kecil, dan semua angka, tetapi hanya sebagai satu karakter.