Metacharacters dalam perwakilan biasa php
Metacharacter
menimbulkan masalah: d bermaksud padankan satu watak. Dan sekarang saya ingin memadankan sepuluh atau lapan, apakah yang perlu saya lakukan dengan sebarang nombor?
Pada masa ini kami akan menggunakan metacharacter. Apabila menggunakan atom, saya mendapati ia hanya boleh memadankan satu aksara, tetapi masalah timbul apabila memadankan berbilang aksara.
Pada masa ini, kita perlu menggunakan aksara meta untuk membantu kita mengubah suai atom dan mencapai lebih banyak fungsi.
Jangan takut dengan perkara berikut. Kami akan memahami segala-galanya selepas kami melakukan eksperimen sedikit demi sedikit. Perkara utama ialah ini lebih serba boleh.
Sebaik-baiknya sediakan kad kecil untuk membantu diri anda mengingati.
Mari kita lihat:
元字符 | 功能說明 |
---|---|
* | 是代表匹配前面的一個(gè)原子,匹配0次或者任意多次前面的字符。 |
+ | 匹配一次或多前前面的一個(gè)字符 |
? | 前面的字符可有可無【可選】 有或沒有 |
. | 更標(biāo)準(zhǔn)一些應(yīng)該把點(diǎn)算作原子。匹配除了n以外的所有字符 |
![]() | 或者。注:它的優(yōu)先級最低了。 |
^ | 必須要以抑揚(yáng)符之后的字符串開始 |
$ | 必須要以$之前的字符結(jié)尾 |
b | 詞邊界 |
B | 非邊界 |
{m} | 有且只能出現(xiàn)m次 |
{n,m} | 可以出現(xiàn)n到m次 |
{m,} | 至少m次,最大次數(shù)不限制 |
() | 改變優(yōu)先級或者將某個(gè)字符串視為一個(gè)整體,匹配到的數(shù)據(jù)取出來也可以使用它 |
+ sepadan dengan aksara sebelumnya
<?php $zz = '/\d+/'; $string = "迪奧和奧迪250都是我最愛"; //待會兒再試試中間沒有0-9的情況 //$string = "迪奧和奧迪都是我最愛"; if(preg_match($zz, $string, $matches)){ echo '匹配到了,結(jié)果為:'; var_dump($matches); }else{ echo '沒有匹配到'; } ?>
sekurang-kurangnya sekali, yang membuktikan + dalam d+. d sepadan dengan nombor, dan + sepadan dengan aksara sebelumnya sekurang-kurangnya sekali.
* Memadankan 0 kali atau mana-mana bilangan aksara sebelumnya
<?php $zz = '/\w*/'; $string = "!@!@!!@#@!$@#!"; //待會兒再試試中間沒有0-9的情況 //$string1 = "!@#!@#!abcABC#@#!"; if(preg_match($zz, $string, $matches)){ echo '匹配到了,結(jié)果為:'; var_dump($matches); }else{ echo '沒有匹配到'; } ?>
Penjelasan, $string1 dan $string yang diulas berjaya dipadankan . Kerana, w sepadan dengan 0-9A-Za-z_, dan * bermakna w sebelumnya tidak wujud. Jika ada boleh ada 1 atau lebih.
? Aksara sebelumnya muncul 0 atau 1 kali, pilihan
<?php $zz = '/ABC\d?ABC/'; $string = "ABC1ABC"; //待會兒再試試中間沒有0-9的情況 //$string1 = "ABC888888ABC"; //$string2 = "ABCABC"; if(preg_match($zz, $string, $matches)){ echo '匹配到了,結(jié)果為:'; var_dump($matches); }else{ echo '沒有匹配到'; } ?>
sepadan dengan $string, $string2 berjaya, tetapi gagal untuk memadankan $string1.
Sebab ada ABC sebelum dan selepas padan, dan ada 0-9 di tengah 0-9 adalah pilihan, tetapi tidak boleh lebih daripada satu.
. (titik) Memadankan semua aksara kecuali n
<?php $zz = '/gg.+gg/'; $string = "ABC1ABC"; if(preg_match($zz, $string, $matches)){ echo '匹配到了,結(jié)果為:'; var_dump($matches); }else{ echo '沒有匹配到'; } ?>
sepadan dengan $string, $string2 berjaya, tetapi gagal untuk memadankan $string1.
Sebab ada ABC sebelum dan selepas padan, dan ada 0-9 di tengah 0-9 adalah pilihan, tetapi tidak boleh lebih daripada satu.
|. (bar menegak), atau, keutamaan terendah
Mari lihat melalui eksperimen padanan keutamaan dan atau
<?php $zz = '/abc|bcd/'; $string1 = "abccd"; $string2 = "ggggbcd"; if (preg_match($zz, $string1, $matches)) { echo '匹配到了,結(jié)果為:'; var_dump($matches); } else { echo '沒有匹配到'; } ?>
Mari lihat Lihat:
1. Pada mulanya, idea saya padanan adalah padanan abccd atau abbcd. Walau bagaimanapun, apabila memadankan $string1 dan $string2, keputusan padanan ialah abc dan bcd. Ia tidak mempunyai keutamaan yang lebih tinggi daripada rentetan yang bersebelahan.
Maka persoalannya, apakah yang perlu saya lakukan jika saya ingin memadankan abccd atau abbcd dalam contoh di atas?
Anda perlu menggunakan () untuk menukar keutamaan.
<?php $zz = '/ab(c|b)cd/'; $string1 = "起來abccd閱兵"; $string2 = "ggggbcd"; $string3 = '中國abbcd未來'; if (preg_match($zz, $string1, $matches)) { echo '匹配到了,結(jié)果為:'; var_dump($matches); } else { echo '沒有匹配到'; } ?>
Keputusannya adalah seperti berikut:
Kesimpulan:
1. Ia sepadan dengan abccd atau abbcd ($string1 atau $ string3).
2. Tetapi terdapat satu lagi elemen dalam tatasusunan padanan, dan subskrip elemen ini ialah 1
3. Selagi kandungan dalam () berjaya dipadankan, data yang dipadankan akan diletakkan dalam Dalam elemen tatasusunan ini dengan indeks 1.
^ (circumflex), mesti bermula dengan rentetan selepas ^<?php
$zz = '/^豬哥好帥\w+/';
$string1 = "豬哥好帥abccdaaaasds";
//$string2沒有以豬哥好帥開始
$string2 = "帥abccdaaaasds";
if (preg_match($zz, $string1, $matches)) {
echo '匹配到了,結(jié)果為:';
var_dump($matches);
} else {
echo '沒有匹配到';
}
?>
Kesimpulan berikut ditemui melalui eksperimen:
1.$string1 The perlawanan berjaya, tetapi $string2 tidak berjaya dipadankan
2. Kerana $string1 bermula dengan aksara yang ditentukan
3. $string2 tidak bermula dengan aksara selepas ^
4. Maksud terjemahan peraturan biasa ini ialah: bermula dengan "Abang Babi sangat kacak" diikuti dengan sekurang-kurangnya satu watak a-zA-Z0-9_.
$ (tanda dolar) mesti diakhiri dengan watak sebelum $<?php
$zz = '/\d+努力$/';
$string1 = "12321124333努力";
//$string2
$string2 = "12311124112313力";
if (preg_match($zz, $string1, $matches)) {
echo '匹配到了,結(jié)果為:';
var_dump($matches);
} else {
echo '沒有匹配到';
}
?>
Mari kita jalankan dan lihat hasilnya dan buat kesimpulan:
1.$string1 berjaya dipadankan, tetapi $string2 gagal padan
2. Watak sebelum $ ialah d+, diikuti dengan usaha Cina.
3. Oleh itu, perlawanan ini adalah keseluruhannya. d merujuk kepada integer 0-9, dan tanda + mewakili sekurang-kurangnya satu 0-9
b dan B perkataan sempadan dan bukan perkataan sempadan
Apakah kami akan menerangkan Adakah sempadan:
1. Ungkapan biasa mempunyai sempadan.
2. Ini adalah perkataan Inggeris, diikuti dengan ruang, yang bermaksud bahawa perkataan itu telah berakhir dan mencapai sempadan perkataan
b perkataan boundary, yang bermaksud ia mesti berada di depan atau akhirnya.
B bukan sempadan, iaitu, ia tidak boleh berada di permulaan atau penghujung ungkapan biasa.
<?php $zz = '/\w+\b/'; $string1 = "this is a apple"; $string2 = "thisis a apple"; $string3 = "thisisaapple"; if (preg_match($zz, $string1, $matches)) { echo '匹配到了,結(jié)果為:'; var_dump($matches); } else { echo '沒有匹配到'; } ?>
Kesimpulan:
1.$string1, $string2 dan $string3 semuanya berjaya dipadankan.
2. Apabila $string1 sepadan, ruang ini adalah sempadan
3. Apabila $string2 sepadan, inilah sempadannya
4. Apabila $string3 sepadan, thisisaapple mencapai keseluruhan ungkapan Biasa mewakili penghujung dan oleh itu sempadan. Jadi perlawanan itu berjaya.
Mari bereksperimen dengan sempadan bukan perkataan:
<?php $zz = '/\Bthis/'; $string1 = "hellothis9"; //$string2 = "hello this9"; //$string2 = "this9中國萬歲"; if (preg_match($zz, $string1, $matches)) { echo '匹配到了,結(jié)果為:'; var_dump($matches); } else { echo '沒有匹配到'; } ?>
Ringkasan:
1. Memadankan $string1 berjaya tetapi $string2 tidak berjaya.
2. Kerana B diikuti oleh ini, ini tidak boleh muncul pada sempadan perkataan (ruang dan permulaan dan akhir).
{m} boleh dan hanya boleh muncul m kali
<?php $zz = '/喝\d{3}酒/'; $string1 = "喝988酒"; //$string2 = "喝98811酒"; if (preg_match($zz, $string1, $matches)) { echo '匹配到了,結(jié)果為:'; var_dump($matches); } else { echo '沒有匹配到'; } ?>
Kesimpulan:
Dalam contoh di atas, d{3} saya menyatakan bahawa 0-9 boleh hanya muncul 3 kali, bukan sekali lebih atau kurang.
{n,m} boleh muncul n hingga m kali
<?php $zz = '/喝\d{1,3}酒/'; $string1 = "喝9酒"; //$string2 = "喝988酒"; if (preg_match($zz, $string1, $matches)) { echo '匹配到了,結(jié)果為:'; var_dump($matches); } else { echo '沒有匹配到'; } ?>
Kesimpulan:
Dalam contoh di atas, saya menyatakan 0-9 untuk d{1, 3} Hanya boleh muncul sekali, 2 atau 3 kali. Semua masa lain adalah salah
{m,} sekurang-kurangnya m kali, bilangan maksimum tidak terhad
<?php $zz = '/喝\d{2,}/'; $string1 = "喝9"; //$string2 = "喝98"; //$string3 = "喝98122121"; if (preg_match($zz, $string1, $matches)) { echo '匹配到了,結(jié)果為:'; var_dump($matches); } else { echo '沒有匹配到'; } ?>
Kesimpulan:
d{2,} dalam contoh di atas saya menetapkan bahawa nombor 0-9 selepas minuman muncul sekurang-kurangnya dua kali, dan tidak ada had untuk bilangan maksimum kali. Oleh itu, $string1 tidak berjaya padanan dan $string2 berjaya dipadankan. $string3 berjaya dipadankan.