Latest web development tutorials

Regular Expressions - Sintaks

Regex (ekspresi reguler) menggambarkan satu set string yang dapat digunakan untuk memeriksa apakah string mengandung substring tertentu yang cocok substring jangan mengganti atau menghapus kondisi cocok dengan substring dari string dan sebagainya.

  • Katalog kolom, dir * .txt ls * .txt atau * .txt tidak dalam ekspresi reguler, karena ada * adalah * dengan ekspresi reguler yang berarti berbeda.
  • Metode membangun ekspresi reguler dan menciptakan ekspresi matematika dengan cara yang sama. Artinya, menggunakan berbagai metakarakter dan operator dapat menggabungkan ekspresi kecil bersama-sama untuk menciptakan ekspresi yang lebih besar. ekspresi reguler komponen dapat menjadi karakter tunggal, set karakter, pilih berbagai karakter, antara karakter, atau kombinasi dari semua komponen ini.

Kalimat biasa mode teks terdiri dari karakter umum (seperti huruf dari ke z) dan karakter khusus (disebut "meta-karakter") daripadanya. deskripsi modus ketika mencari teks untuk mencocokkan satu atau lebih string. ekspresi reguler sebagai template, modus karakter dan string pencarian untuk mencocokkan.

karakter biasa

karakter biasa tidak secara eksplisit ditetapkan sebagai metakarakter semua karakter yang dapat dicetak dan non-printable. Ini termasuk semua huruf besar dan huruf kecil, semua angka, semua tanda baca dan simbol lainnya.

karakter non-printing

karakter non-cetak juga dapat menjadi bagian dari ekspresi reguler. Tabel berikut ini berisi urutan escape yang mewakili karakter non-printing:

字符 描述
\cx 匹配由x指明的控制字符。例如, \cM 匹配一个 Control-M 或回车符。x 的值必须为 A-Z 或 a-z 之一。否则,将 c 视为一个原义的 'c' 字符。
\f 匹配一个换页符。等价于 \x0c 和 \cL。
\n 匹配一个换行符。等价于 \x0a 和 \cJ。
\r 匹配一个回车符。等价于 \x0d 和 \cM。
\s 匹配任何空白字符,包括空格、制表符、换页符等等。等价于 [ \f\n\r\t\v]。
\S 匹配任何非空白字符。等价于 [^ \f\n\r\t\v]。
\t 匹配一个制表符。等价于 \x09 和 \cI。
\v 匹配一个垂直制表符。等价于 \x0b 和 \cK。

karakter khusus

Yang disebut karakter khusus, adalah bahwa beberapa karakter memiliki arti khusus, seperti dikatakan "* .txt" di *, hanya berarti bahwa string representasi dari makna. Jika Anda ingin mencari nama file dengan file *, Anda perlu untuk melarikan diri *, yaitu plus di depan \. ls \ *. txt.

Banyak metakarakter memerlukan perlakuan khusus ketika mencoba untuk mencocokkan mereka. Untuk mencocokkan karakter khusus, Anda harus terlebih dahulu membuat karakter "escape", yaitu, karakter backslash (\) di depan mereka. Tabel berikut berisi daftar karakter khusus ekspresi reguler:

特别字符 描述
$ 匹配输入字符串的结尾位置。如果设置了 RegExp 对象的 Multiline 属性,则 $ 也匹配 '\n' 或 '\r'。要匹配 $ 字符本身,请使用 \$。
( ) 标记一个子表达式的开始和结束位置。子表达式可以获取供以后使用。要匹配这些字符,请使用 \( 和 \)。
* 匹配前面的子表达式零次或多次。要匹配 * 字符,请使用 \*。
+ 匹配前面的子表达式一次或多次。要匹配 + 字符,请使用 \+。
. 匹配除换行符 \n之外的任何单字符。要匹配 .,请使用 \。
[ 标记一个中括号表达式的开始。要匹配 [,请使用 \[。
? 匹配前面的子表达式零次或一次,或指明一个非贪婪限定符。要匹配 ? 字符,请使用 \?。
\ 将下一个字符标记为或特殊字符、或原义字符、或向后引用、或八进制转义符。例如, 'n' 匹配字符 'n'。'\n' 匹配换行符。序列 '\\' 匹配 "\",而 '\(' 则匹配 "("。
^ 匹配输入字符串的开始位置,除非在方括号表达式中使用,此时它表示不接受该字符集合。要匹配 ^ 字符本身,请使用 \^。
{ 标记限定符表达式的开始。要匹配 {,请使用 \{。
| 指明两项之间的一个选择。要匹配 |,请使用 \|。

kualifikasi

Kualifikasi digunakan untuk menentukan ekspresi reguler dari komponen tertentu harus muncul berkali-kali untuk memenuhi pertandingan. Ada * atau + atau? Atau {n} atau {n,} atau {n, m} total 6.

ekspresi reguler kualifikasi adalah:

字符 描述
* 匹配前面的子表达式零次或多次。例如,zo* 能匹配 "z" 以及 "zoo"。* 等价于{0,}。
+ 匹配前面的子表达式一次或多次。例如,'zo+' 能匹配 "zo" 以及 "zoo",但不能匹配 "z"。+ 等价于 {1,}。
? 匹配前面的子表达式零次或一次。例如,"do(es)?" 可以匹配 "do" 或 "does" 中的"do" 。? 等价于 {0,1}。
{n} n 是一个非负整数。匹配确定的 n 次。例如,'o{2}' 不能匹配 "Bob" 中的 'o',但是能匹配 "food" 中的两个 o。
{n,} n 是一个非负整数。至少匹配n 次。例如,'o{2,}' 不能匹配 "Bob" 中的 'o',但能匹配 "foooood" 中的所有 o。'o{1,}' 等价于 'o+'。'o{0,}' 则等价于 'o*'。
{n,m} m 和 n 均为非负整数,其中n <= m。最少匹配 n 次且最多匹配 m 次。例如,"o{1,3}" 将匹配 "fooooood" 中的前三个 o。'o{0,1}' 等价于 'o?'。请注意在逗号和两个数之间不能有空格。

Karena jumlah bab dalam dokumen masukan yang besar kemungkinan akan lebih dari sembilan, sehingga Anda perlu cara untuk berurusan dengan dua atau tiga nomor bab. Kualifikasi memberi Anda kemampuan ini. Berikut ekspresi reguler cocok sejumlah bit nomor judul bab:

/Chapter [1-9][0-9]*/

Harap dicatat bahwa kualifikasi muncul setelah ekspresi jangkauan. Dengan demikian, itu berlaku untuk seluruh rentang ekspresi, dalam hal ini, hanya jumlah tertentu dari 0-9 (termasuk 0 dan 9).

+ Qualifier tidak digunakan di sini, seperti di posisi kedua atau posisi belakang tidak perlu harus memiliki nomor. Nor digunakan? Karakter, karena membatasi jumlah bab hanya dua digit. Anda harus mencocokkan nomor setidaknya satu Bab dan ruang karakter kembali.

Jika Anda tahu nomor bab terbatas hanya 99 bab, Anda dapat menggunakan ekspresi berikut untuk menentukan setidaknya satu tapi setidaknya dua digit.

/Chapter [0-9]{1,2}/

Kerugian dari ekspresi di atas lebih besar dari 99 bab masih jumlahnya hanya cocok awal dua digit. Kerugian lain adalah bahwa Bab 0 juga akan cocok. pencocokan yang lebih baik dari hanya dua angka dari ekspresi adalah sebagai berikut:

/Chapter [1-9][0-9]?/

atau

/Chapter [1-9][0-9]{0,1}/

*, +, Dan? Kualifikasi serakah karena mereka cocok sebanyak teks, hanya di belakang mereka, ditambah? Dapat dicapai pertandingan non-serakah atau minimal.

Misalnya, Anda mungkin mencari dokumen HTML untuk menemukan tertutup di H1 bagian tag judul. Teks dalam dokumen Anda sebagai berikut:

<H1>Chapter 1 – Introduction to Regular Expressions</H1>

Semua isi sesuai dengan ungkapan berikut mulai dari kurang dari tanda (<) untuk menutup tag H1 lebih besar dari simbol (>) antara.

/<.*>/

Jika Anda hanya perlu mencocokkan awal tag H1, berikut "non-serakah" ekspresi hanya cocok <H1>.

/<.*?>/

Oleh *, +, atau? Setelah tempat kualifikasi? Ekspresi dapat beralih dari "serakah" untuk "non-serakah" atau minimal pencocokan ekspresi.

Locator

Locator memungkinkan Anda untuk ekspresi reguler adalah tetap ke awal atau akhir baris. Mereka juga memungkinkan Anda untuk membuat ekspresi reguler seperti, ekspresi reguler muncul dalam kata, kata di awal atau akhir kata.

Locator digunakan untuk menggambarkan string atau batas kata, ^ dan $ mengacu pada awal dan akhir string, \ deskripsi batas b sebelum atau setelah kata, \ B merupakan batas non-kata.

ekspresi reguler kualifikasi adalah:

字符 描述
^ 匹配输入字符串开始的位置。如果设置了 RegExp 对象的 Multiline 属性,^ 还会与 \n 或 \r 之后的位置匹配。
$ 匹配输入字符串结尾的位置。如果设置了 RegExp 对象的 Multiline 属性,$ 还会与 \n 或 \r 之前的位置匹配。
\b 匹配一个字边界,即字与空格间的位置。
\B 非字边界匹配。

Catatan: Anda tidak dapat menggunakan kualifikasi dan anchor point. Karena segera sebelum atau setelah pembungkus atau kata batas tidak dapat memiliki lebih dari satu lokasi, dan karena itu tidak memungkinkan seperti ekspresi seperti ^ *.

Untuk mencocokkan baris teks pada awal teks, silakan mulai menggunakan ekspresi n ^ karakter. ^ Jangan gunakan ini menggunakan ekspresi dalam kurung dalam kebingungan.

Untuk mencocokkan teks di akhir baris teks, melihat akhir dari ekspresi menggunakan $ karakter dalam positif.

Untuk menggunakan judul bagian dalam pencarian ketika titik anchor, ekspresi reguler berikut cocok dengan judul bab, judul berisi hanya dua diikuti dengan nomor, dan awal baris:

/^Chapter [1-9][0-9]{0,1}/

judul bab benar hanya muncul di awal baris, tetapi satu-satunya teks dalam baris. Tampaknya baris pertama kali muncul pada akhir baris yang sama. Ekspresi berikut dapat yakin bahwa pertandingan ditentukan hanya cocok tanpa pencocokan bagian referensi silang. Dengan membuat hanya cocok dengan awal dan akhir baris teks dari ekspresi reguler, Anda dapat melakukannya.

/^Chapter [1-9][0-9]{0,1}$/

batas kata pertandingan sedikit berbeda, tapi ekspresi reguler kemampuan yang sangat penting. batas kata adalah lokasi dan ruang antara kata-kata. batas non-kata adalah lokasi lain. Ekspresi berikut cocok dengan awal kata Bab tiga karakter, karena tiga karakter ini muncul setelah batas kata:

/\bCha/

\ Posisi karakter B sangat penting. Jika terletak di awal string untuk dicocokkan, terlihat untuk pertandingan di awal kata. Jika itu adalah pada akhir string, terlihat untuk pertandingan di akhir kata. Misalnya, ekspresi berikut pencocokan kata Bab tali ter, seperti yang muncul di depan batas kata:

/ter\b/

Ekspresi berikut cocok dengan string Bab apt, tapi tidak sesuai dengan bakat tali apt:

/\Bapt/

Apt kata string yang muncul di Bab batas non-kata, tapi kata itu muncul dalam bakat dari batas kata. Untuk operator batas non-kata B \, posisi tidak penting, karena pertandingan tidak peduli apakah itu di awal atau akhir kata.

memilih

Gunakan tanda kurung untuk melampirkan semua pilihan, dengan pilihan antara yang berdekatan dipisahkan oleh |. Tapi ada efek samping dari menggunakan tanda kurung, adalah pertandingan yang relevan akan di-cache, tersedia saat ini :? Pada opsi pertama untuk menghilangkan efek samping ini.

Dimana :? Non-capture salah satu unsur, ada dua non-menangkap elemen = dan dua memiliki arti lebih, mantan Positif pra-penyelidikan, di awal setiap menjadi tanda kurung cocok adalah ekspresi ??! pola posisi untuk mencocokkan string pencarian, yang negatif pra-penyelidikan, dalam start posisi tidak sesuai dengan pola ekspresi biasa untuk mencocokkan string pencarian.

backreferences

Untuk pola yang teratur ekspresi atau bagian dari pola di kedua belah pihak akan menghasilkan kurung ditambahkan pertandingan relevan dengan buffer penyimpanan sementara, masing-masing sub-ditangkap disimpan dalam urutan dari kiri ke kanan pertandingan muncul dalam pola ekspresi reguler. Buffer No. 1 dari awal, dapat menyimpan hingga 99 subexpression ditangkap. Setiap buffer dapat menggunakan '\ n' mengunjungi, di mana n adalah satu atau dua digit desimal mengidentifikasi buffer tertentu.

Anda dapat menggunakan metakarakter non-menangkap ':?', Atau untuk menulis ulang menangkap, menyimpan mengabaikan pertandingan yang relevan '=?'?! '.

Backreferences termudah, salah satu yang paling berguna adalah kemampuan untuk menyediakan teks untuk menemukan dua pertandingan kata yang berdekatan identik. Contoh dalam kalimat berikut:

Is is the cost of of gasoline going up up?

Kalimat di atas jelas memiliki banyak kata diulang. Jika kita bisa merancang sebuah metode untuk menemukan kalimat, daripada menemukan duplikat kejadian dari setiap kata, bahwa lebih baik. Berikut ekspresi reguler menggunakan subexpression tunggal untuk mencapai hal ini:

/\b([a-z]+) \1\b/gi

Menangkap ekspresi, seperti [az] + ditentukan, termasuk satu atau lebih huruf. Bagian kedua dari ekspresi reguler adalah untuk mencocokkan anak referensi sebelumnya ditangkap, yaitu, terjadinya kedua kata hanya cocok dengan ekspresi dalam kurung. \ 1 menentukan sub-pertandingan pertama. Batas kata metakarakter memastikan bahwa hanya mendeteksi seluruh kata. Jika tidak, ungkapan-ungkapan seperti "dikeluarkan" atau "ini" dan sejenisnya tidak benar mengidentifikasi ekspresi ini.

ekspresi reguler setelah tag global (g) menunjukkan, ungkapan ini diterapkan pada input string dapat menemukan banyak pertandingan. Kasus ekspresi sensitif pada akhir (i) tag menentukan kasus-sensitif. Potensi pertandingan multi-tag line menentukan jeda baris dapat terjadi pada kedua sisi.

Backreferences juga bisa menjadi Universal Resource Indicator (URI) menjadi komponen-komponennya. Misalkan Anda ingin dipecah menjadi sebagai berikut URI protokol (ftp, http, dll), alamat domain dan halaman / path:

http://www.w3cschool.cc:80/html/html-tutorial.html

Berikut ekspresi reguler menyediakan fungsi ini:

/(\w+):\/\/([^/:]+)(:\d*)?([^# ]*)/

Subexpression kurung pertama menangkap bagian protokol dari alamat Web. subexpression yang cocok dengan kata usus dan dua garis miring ke depan di depan. Subexpression kurung kedua menangkap bagian alamat domain dari alamat. Satu atau lebih karakter selain: subexpression pertandingan / dan. Subexpression kurung ketiga menangkap nomor port (jika ditentukan). Sub-ekspresi cocok dengan nol atau lebih digit setelah titik dua. Ini hanya dapat diulang setelah sub-ekspresi. Akhirnya, subexpression kurung keempat menangkap alamat Web jalan yang ditentukan dan / atau halaman. Ini tidak termasuk sub-ekspresi cocok dengan urutan karakter # atau ruang karakter.

Ekspresi reguler diterapkan di atas URI, masuknya sub-matching mengandung unsur-unsur berikut:

  • Subexpression kurung pertama berisi "http"
  • Subexpression kurung kedua berisi "www.w3cschool.cc"
  • Subexpression kurung ketiga dengan ": 80"
  • Subexpression kurung keempat berisi "/html/html-tutorial.html"