Tutorial Pembangunan PHP Asas: Metacharacter dalam Ungkapan Biasa

1. Metacharacter

Keperluan baharu: d mewakili padanan satu aksara. Dan sekarang saya mahu memadankan sepuluh atau lapan, apakah yang perlu saya lakukan dengan sebarang nombor?

Pada masa ini kami akan menggunakan aksara meta. 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.

Mari lihat:

21.png

  • + Padankan watak sebelumnya <🎜 sekurang-kurangnya sekali >

Kodnya adalah seperti berikut:

<?php
$zz = '/\d+/';
$string = "迪奥和奥迪250都是我最爱";
//待会儿再试试中间没有0-9的情况
//$string = "迪奥和奥迪都是我最爱";
if(preg_match($zz, $string, $matches)){
    echo '匹配到了,结果为:';
    var_dump($matches);
}else{
    echo '没有匹配到';
}
?>

Perlawanan berjaya, membuktikan + dalam d+. d sepadan dengan nombor, dan + sepadan dengan aksara sebelumnya sekurang-kurangnya sekali.

  • sepadan dengan aksara sebelumnya 0 kali atau mana-mana bilangan kali

Kodnya adalah seperti berikut:

<?php
$zz = '/\w*/';
 
$string = "!@!@!!@#@!$@#!";
//$string1 = "!@#!@#!abcABC#@#!";
if(preg_match($zz, $string, $matches)){
    echo '匹配到了,结果为:';
    var_dump($matches);
}else{
    echo '没有匹配到';
}
?>

Ambil perhatian bahawa ulasan $string1 dan $string 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

Kodnya adalah seperti berikut:

<?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 '没有匹配到';
}
?>

Memadankan $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) sepadan dengan semua aksara kecuali n

  • <?php
    $zz = '/gg.+gg/';
    $string = "ABC1ABC";
    if(preg_match($zz, $string, $matches)){
        echo '匹配到了,结果为:';
        var_dump($matches);
    }else{
        echo '没有匹配到';
    }
    ?>
tidak berjaya dipadankan kerana kedua-dua bahagian depan dan belakang adalah diperlukan Ia gg,

2. | (bar menegak), atau, keutamaan terendah

Mari lihat melalui eksperimen jumlah keutamaan dan atau Matching

<?php
 
$zz = '/abc|bcd/';
$string1 = "abccd";
$string2 = "ggggbcd";
 
if (preg_match($zz, $string1, $matches)) {
    echo '匹配到了,结果为:';
    var_dump($matches);
} else {
    echo '没有匹配到';
}
?>

Mari kita lihat:

1. Pada mulanya, idea saya untuk memadankan adalah untuk memadankan abccd atau abbcd. Walau bagaimanapun, apabila memadankan $string1 dan $string2, hasil padanan ialah abc dan bcd

2. 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.

Kod adalah seperti berikut:

<?php
$zz = '/ab(c|b)cd/';
$string1 = "起来abccd阅兵";
$string2 = "ggggbcd";
$string3 = '中国abbcd未来';
if (preg_match($zz, $string1, $matches)) {
    echo '匹配到了,结果为:';
    var_dump($matches);
} else {
    echo '没有匹配到';
}
?>

Keputusan adalah seperti berikut:

22.png

Kesimpulan:

1. Ia sepadan dengan abccd atau abbcd ($string1 atau $string3).

2. Tetapi terdapat satu lagi elemen dalam tatasusunan yang sepadan, dan subskrip elemen ini ialah 1

3. Selagi kandungan dalam () berjaya dipadankan, data yang dipadankan akan diletakkan dalam elemen tatasusunan dengan subskrip 1.

3. ^ (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 berjaya dipadankan, $string2 tidak berjaya dipadankan

2 Kerana $string1 bermula dengan aksara yang ditentukan

3. Dan $string2 tidak bermula dengan aksara selepas ^

4 a-zA-Z0-9_Sekurang-kurangnya satu aksara.

4 $ (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. Melihat kepada keputusan, kami sampai pada kesimpulan:

1.$string1 berjaya dipadankan, tetapi $string2 gagal dipadankan

2. $ sebelum Watak ialah d+, diikuti dengan usaha Cina.

3 Oleh itu, yang dipadankan ialah keseluruhan ini. d merujuk kepada integer 0-9, dan tanda + mewakili sekurang-kurangnya satu 0-9

5. sempadan perkataan b dan B dan sempadan bukan perkataan

Mari kita terangkan apakah sempadan itu:

1 Ungkapan biasa mempunyai sempadan ini adalah di mana permulaan dan penghujung pembatas adalah sempadan biasa.

2.ini ialah perkataan Inggeris, diikuti dengan ruang, yang bermaksud perkataan itu telah berakhir dan mencapai perkataan boundary

  • b word boundary, iaitu It bermakna ia mesti pertama atau terakhir.

  • 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, ini adalah sempadannya >

4 Apabila $string3 sepadan, thisisaapple mencapai penghujung keseluruhan ungkapan biasa, jadi ia juga merupakan 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:

Berjaya memadankan $string1 tetapi $string2 gagal .

Oleh kerana B diikuti oleh ini, ini tidak boleh muncul pada sempadan perkataan (ruang dan permulaan dan akhir).

6 {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: Contoh di atas Dalam d{3}, saya menetapkan bahawa 0-9 hanya boleh muncul 3 kali, bukan sekali lebih atau kurang.


7 {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: Bahagian. 1 Dalam contoh d{1,3}, saya menetapkan bahawa 0-9 hanya boleh muncul sekali, 2 atau 3 kali. Semua masa lain adalah salah


8 {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:
Dalam contoh di atas, kami menetapkan bahawa d{2,} dan 0-9 berikut muncul sekurang-kurangnya dua kali, dan tiada had kepada bilangan maksimum kali. Oleh itu, $string1 tidak berjaya padanan dan $string2 berjaya dipadankan. $string3 berjaya dipadankan.


Meneruskan pembelajaran
||
<?php $zz = '/\d+/'; $string = "迪奥和奥迪250都是我最爱"; //待会儿再试试中间没有0-9的情况 //$string = "迪奥和奥迪都是我最爱"; if(preg_match($zz, $string, $matches)){ echo '匹配到了,结果为:'; var_dump($matches); }else{ echo '没有匹配到'; } ?>
  • Cadangan kursus
  • Muat turun perisian kursus