Latest web development tutorials

Regular Expressions - aturan pencocokan

pencocokan pola dasar

Semua mulai dengan dasar-dasar. Pola adalah ekspresi reguler adalah elemen yang paling dasar, yang ditandai dengan string deskripsi sekelompok karakter. Mode bisa sangat sederhana, terdiri dari string biasa, juga bisa sangat kompleks, sering mewakili berbagai karakter dengan karakter khusus, berulang, atau mewakili konteks. Sebagai contoh:

^once

Model ini berisi karakter khusus ^, menunjukkan bahwa pola cocok hanya sekali mereka mulai dengan tali. Misalnya, string pola "sekali waktu" pertandingan tidak cocok "Ada seorang pria dari NewYork". Dengan demikian ^ simbol menunjukkan awal yang sama, $ simbol untuk mencocokkan string mereka pada akhir mode yang diberikan.

bucket$

Model dan "Siapa yang menyimpan semua uang ini dalam ember" pertandingan tidak sesuai dengan "ember". ^ Dan $ karakter bila digunakan secara bersamaan, itu merupakan pencocokan sama persis (modus string sebagai). Sebagai contoh:

^bucket$

Cocok hanya string "ember". Jika model tidak termasuk ^ dan $, berisi string untuk menyesuaikan dari pola. Sebagai contoh: Modus

once

dengan tali

There once was a man from NewYork
Who kept all of his cash in a bucket.

Pertandingan.

Surat (sekali) dalam mode ini adalah karakter literal, yaitu, mereka mengatakan surat itu sendiri, sosok itu adalah sama. Beberapa karakter lain sedikit lebih kompleks seperti tanda baca dan karakter putih (spasi, tab, dll), menggunakan urutan escape. Semua escape sequence dimulai dengan backslash (\). Tabs melarikan diri urutan: \ t. Jadi jika kita ingin menguji apakah string dimulai dengan tab, Anda dapat menggunakan mode ini:

^\t 

Demikian pula, diwakili oleh \ n "baris baru", \ r carriage return. simbol-simbol khusus lainnya dapat digunakan di depan sebuah backslash, seperti backslash sendiri dengan \\ kata periode. Dengan \. Representasi, dan sebagainya.

karakter klaster

Program di INTERNET, ekspresi reguler sering digunakan untuk memvalidasi input pengguna. Ketika pengguna mengirimkan FORMULIR kemudian, masukkan nomor telepon Anda ingin menilai, alamat, alamat EMAIL, nomor kartu kredit ini berlaku, dengan karakter umum berdasarkan literal tidak cukup.

Jadi, untuk menggunakan model yang lebih bebas untuk menggambarkan pendekatan kami, itu adalah kelompok karakter. Untuk membuat representasi karakter semua vokal cluster, menempatkan semua karakter vokal dalam tanda kurung siku:

[AaEeIiOoUu]

Pola ini cocok dengan karakter vokal, tapi hanya mewakili karakter. Dengan tanda hubung dapat mewakili berbagai karakter, seperti:

[a-z] //匹配所有的小写字母 
[A-Z] //匹配所有的大写字母 
[a-zA-Z] //匹配所有的字母 
[0-9] //匹配所有的数字 
[0-9\.\-] //匹配所有的数字,句号和减号 
[ \f\r\t\n] //匹配所有的白字符

Demikian pula, ini hanya mewakili karakter, ini adalah sangat penting. Jika Anda ingin mencocokkan huruf kecil dan satu per satu string angka, seperti "z2", "t6" atau "g7", tapi tidak "ab2", "r2d3" atau "b52", kemudian menggunakan pola ini:

^[a-z][0-9]$

Meskipun [az] atas nama 26 huruf dari jangkauan, tapi di sini hanya karakter pertama adalah huruf kecil string matching.

Seperti yang disebutkan sebelumnya ^ merupakan awal dari string, tetapi juga memiliki makna lain. Ketika digunakan dalam tanda kurung ^ adalah bahwa itu berarti "tidak" atau "pengecualian" berarti, sering digunakan untuk menghilangkan karakter. Juga menggunakan contoh sebelumnya, kita minta karakter pertama tidak bisa berupa angka:

^[^0-9][0-9]$

Mode ini "& 5", "g7" dan "-2" cocok, tapi dengan "12", "66" adalah tidak cocok. Berikut adalah beberapa contoh mengecualikan karakter khusus:

[^a-z] //除了小写字母以外的所有字符 
[^\\\/\^] //除了(\)(/)(^)之外的所有字符 
[^\"\'] //除了双引号(")和单引号(')之外的所有字符

karakter khusus "." (Dot, titik) dalam ekspresi reguler digunakan untuk mewakili Selain "baris baru" dari semua karakter. Jadi pola "^ .5 $" dan setiap dua karakter untuk akhir nomor 5 dan string pertandingan di non karakter "baris baru" lain di awal. Mode. "" Bisakah cocok dengan string apapun, selain string kosong, dan hanya mencakup "baris baru" string.

PHP ekspresi reguler telah beberapa built-in klaster karakter universal, daftar adalah sebagai berikut:

字符簇 描述
[[:alpha:]] 任何字母
[[:digit:]] 任何数字
[[:alnum:]] 任何字母和数字
[[:space:]] 任何空白字符
[[:upper:]] 任何大写字母
[[:lower:]] 任何小写字母
[[:punct:]] 任何标点符号
[[:xdigit:]] 任何16进制的数字,相当于[0-9a-fA-F]

OK diulang

Sampai saat ini, Anda sudah tahu bagaimana untuk mencocokkan huruf atau angka, tetapi lebih banyak kasus, Anda mungkin ingin mencocokkan kata atau satu set angka. Sebuah kata memiliki sejumlah surat, sekelompok beberapa tokoh dalam jumlah ganjil. Dengan karakter atau karakter di balik gugusan kurung kurawal ({}) yang digunakan untuk menentukan jumlah mengulangi isi sebelumnya.

字符簇 描述
^[a-zA-Z_]$ 所有的字母和下划线
^[[:alpha:]]{3}$ 所有的3个字母的单词
^a$ 字母a
^a{4}$ aaaa
^a{2,4}$ aa,aaa或aaaa
^a{1,3}$ a,aa或aaa
^a{2,}$ 包含多于两个a的字符串
^a{2,} 如:aardvark和aaab,但apple不行
a{2,} 如:baad和aaa,但Nantucket不行
\t{2} 两个制表符
.{2} 所有的两个字符

Contoh-contoh ini menggambarkan penggunaan tiga kawat gigi yang berbeda. Sejumlah, {x} berarti "karakter atau karakter di depan cluster hanya muncul x kali"; koma nomor, {x,} berarti "isi muncul di depan berapa kali x atau lebih"; dua dengan dipisahkan koma angka, {x, y} bahwa "isi di depan setidaknya tampak x kali, tetapi tidak lebih dari y kali." Kita dapat memperluas model untuk beberapa kata atau nomor:

^[a-zA-Z0-9_]{1,}$ //所有包含一个以上的字母、数字或下划线的字符串 
^[1-9][0-9]*$ //所有的正数 
^\-{0,1}[0-9]{1,}$ //所有的整数 
^[-]?[0-9]+\.?[0-9]+$ //所有的浮点数

Contoh terakhir ini tidak dipahami dengan baik, bukan? Jadi Kanba: (? [-]) (. \) Dan semua dengan tanda minus opsional Pada awal (^), diikuti oleh satu atau lebih digit ([0-9] +), dan titik desimal Bicara pada satu atau lebih digit ([0-9] +), dan tidak diikuti oleh apa pun ($). Di bawah ini Anda akan tahu metode yang lebih sederhana dapat digunakan.

"?" Dan karakter khusus {0,1} adalah sama, mereka mewakili: "0 atau 1 di depan 'atau' di depan konten adalah opsional." Jadi hanya contoh dapat disederhanakan sebagai:

^\-?[0-9]{1,}\.?[0-9]{1,}$

karakter khusus "*" dan {0,} adalah sama, mereka semua mewakili "0 atau lebih dari isi sebelumnya." Akhirnya, karakter "+" dan {1} adalah sama, itu menunjukkan "1 atau lebih dari isi sebelumnya", sehingga di atas empat contoh dapat ditulis sebagai:

^[a-zA-Z0-9_]+$ //所有包含一个以上的字母、数字或下划线的字符串 
^[0-9]+$ //所有的正数 
^\-?[0-9]+$ //所有的整数 
^\-?[0-9]*\.?[0-9]*$ //所有的浮点数

Tentu saja, ini tidak secara mendasar mengurangi kompleksitas teknis dari ekspresi reguler, tapi bisa membuat mereka lebih mudah dibaca.