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:
元字符 | 功能说明 |
---|---|
* | 是代表匹配前面的一个原子,匹配0次或者任意多次前面的字符。 |
+ | 匹配一次或多前前面的一个字符 |
? | 前面的字符可有可无【可选】 有或没有 |
. | 更标准一些应该把点算作原子。匹配除了n以外的所有字符 |
或者。注:它的优先级最低了。 | |
^ | 必须要以抑扬符之后的字符串开始 |
$ | 必须要以$之前的字符结尾 |
b | 词边界 |
B | 非边界 |
{m} | 有且只能出现m次 |
{n,m} | 可以出现n到m次 |
{m,} | 至少m次,最大次数不限制 |
() | 改变优先级或者将某个字符串视为一个整体,匹配到的数据取出来也可以使用它 |
+ sepadan dengan aksara sebelumnya
<?php $zz = '/\d+/'; $string = "迪奥和奥迪250都是我最爱"; //待会儿再试试中间没有0-9的情况 //$string = "迪奥和奥迪都是我最爱"; if(preg_match($zz, $string, $matches)){ echo '匹配到了,结果为:'; 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 '匹配到了,结果为:'; 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 '匹配到了,结果为:'; 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 '匹配到了,结果为:'; 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 '匹配到了,结果为:'; 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 '匹配到了,结果为:'; 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 '匹配到了,结果为:';
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 '匹配到了,结果为:';
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 '匹配到了,结果为:'; 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 '匹配到了,结果为:'; 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 '匹配到了,结果为:'; 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 '匹配到了,结果为:'; 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 '匹配到了,结果为:'; 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.