Jadual Kandungan
1. Latar belakang dan cabaran masalah
2. Percubaan dan analisis awal
3. Penyelesaian ungkapan biasa yang tepat
4. Langkah berjaga -jaga dan amalan terbaik
5. Ringkasan
Rumah pembangunan bahagian belakang tutorial php Amalan PHP Preg_match: Panduan untuk mengekstrak digit dengan tepat pada akhir rentetan

Amalan PHP Preg_match: Panduan untuk mengekstrak digit dengan tepat pada akhir rentetan

Oct 01, 2025 am 07:39 AM

Amalan PHP Preg_match: Panduan untuk mengekstrak digit dengan tepat pada akhir rentetan

Artikel ini menerangkan secara terperinci bagaimana untuk mengekstrak nombor dalam format tertentu dari akhir rentetan menggunakan fungsi preg_match PHP. Inti adalah untuk membina corak yang dapat dipadankan dengan tepat rentetan yang bermula dengan aksara bukan Whitespace, mengandungi kandungan sewenang-wenang di tengah, dan akhirnya memisahkan dengan ruang dan mengikuti nombor, sementara tidak termasuk keadaan di mana rentetan bermula dengan ruang, memastikan angka yang diekstrak memenuhi harapan.

1. Latar belakang dan cabaran masalah

Apabila berurusan dengan rentetan, terutamanya nama fail atau entri log, kita sering perlu mengekstrak maklumat dari format tertentu. Keperluan umum adalah untuk mengekstrak nombor dari akhir rentetan, yang mesti memenuhi syarat -syarat berikut:

  1. Ia berada di hujung rentetan.
  2. Ia segera diikuti oleh ruang.
  3. Ruang ini boleh didahului oleh mana -mana watak.
  4. Rentetan keseluruhan tidak boleh bermula dengan ruang.

Sebagai contoh, untuk rentetan "AB 1212" atau "A 1212", kami mengharapkan untuk mengekstrak 1212. Tetapi untuk rentetan "1212", ia tidak sepadan.

2. Percubaan dan analisis awal

Sesetengah percubaan regex biasa mungkin tidak memenuhi keperluan di atas.

Cuba satu: #^(.)* (\ D*) $ #

 $ str = "1212";
preg_match ('#^(.)* (\ d*) $#', $ str, $ Matches);
var_dump ($ perlawanan);
// output:
// array (3) {
// [0] => String (6) "1212"
// [1] => String (1) ""
// [2] => String (4) "1212"
//}

Analisis Masalah: Masalah dengan model ini ialah (.)*. * bermaksud sepadan dengan sifar atau beberapa kali, dan. Memadankan mana -mana watak kecuali rehat garis, termasuk ruang. Oleh itu, ^(.)* Boleh memadankan mana -mana ruang pada permulaan rentetan, mengakibatkan rentetan seperti "1212" dipadankan, yang tidak konsisten dengan keperluan kita.

Cuba dua: penyongsangan rentetan

 $ str = "ab 1212";
preg_match ('#^(\ d*) (\ s*) (.*) $#', strrev ($ str), $ padanan);
var_dump (strrev ($ padanan [1])); // output "1212"

$ str = "1212";
preg_match ('#^(\ d*) (\ s*) (.*) $#', strrev ($ str), $ padanan);
// Pada masa ini, $ perlawanan [1] adalah "2121" (dibalikkan 1212), $ perlawanan [2] adalah "" (tiada ruang), $ perlawanan [3] adalah ""
// Hakim lebih lanjut bahawa $ perlawanan [2]! = '' Boleh dikecualikan.

Analisis Masalah: Kaedah ini diproses dengan membalikkan rentetan. Walaupun ia boleh melaksanakan fungsi, ia meningkatkan kerumitan kod dan tidak kondusif untuk memahami secara intuitif logik yang sepadan dengan ekspresi biasa. Kita harus mencari penyelesaian regex tulen.

3. Penyelesaian ungkapan biasa yang tepat

Untuk memenuhi semua syarat, kita perlu membina ekspresi biasa yang lebih berbutir. Inti adalah untuk memastikan rentetan tidak bermula dengan ruang dan sepadan dengan ruang akhir dan nombor tepat.

* Mod yang disyorkan: `"/\ s. (\ D) $/"` **

Mari merosakkan corak ini:

  • ^: Padankan permulaan rentetan. Ini memastikan bahawa keseluruhan corak sepadan dari titik permulaan rentetan.
  • \ S: Padankan mana-mana watak bukan Whitespace. Ini adalah titik utama, ia memaksa watak pertama rentetan menjadi ruang, dengan itu menghapuskan keadaan seperti "1212".
  • .*: Padankan mana -mana watak (kecuali garis baru) sifar atau lebih kali. Ini dengan ketamakan sepadan dengan semua watak selepas ruang terakhir.
  • ``: Padankan watak ruang literal. Ini memastikan bahawa ada pemisah ruang sebelum nombor.
  • (\ d): Ini adalah kumpulan penangkapan.
    • \ D: Padankan mana-mana nombor (0-9).
    • : Padankan satu atau lebih elemen sebelumnya (iaitu satu atau lebih nombor).
  • $: Padankan akhir rentetan. Ini memastikan nombor itu memang pada akhir rentetan.

Contoh kod:

  Php

fungsi ExtractNumberatend (String $ str) :? String
{
    // Tentukan ungkapan biasa:
    // ^ - Padankan permulaan rentetan // \ s - sepadan dengan watak bukan Whitespace (mencegah rentetan dari awal dengan ruang)
    //.* - Padankan mana -mana aksara sifar atau beberapa kali (tamak sepadan dengan kandungan pertengahan)
    // \ s - Padankan watak ruang putih (di sini ia merujuk secara khusus ke ruang, anda juga boleh menggunakan '' untuk menjadi lebih jelas)
    // (\ d) - menangkap satu atau lebih nombor // $ - sepadan dengan akhir rentetan $ corak = "/^\.* (\ d) $/";

    jika (preg_match (corak $, $ str, $ padanan)) {
        // $ perlawanan [0] mengandungi rentetan padanan lengkap // $ perlawanan [1] mengandungi kandungan kumpulan penangkapan pertama, iaitu nombor yang kita perlukan untuk mengembalikan $ perlawanan [1];
    }
    kembali null; // Sekiranya tiada perlawanan dicapai, kembali null
}

// kes ujian echo "--- padanan sah ---". Php_eol;
$ str1 = "ab 1212";
echo "String: '{$ str1}' -> Hasil ekstrak:". (ExtractNumberatend ($ str1) ?? "Tidak dipadankan"). Php_eol; // output: 1212

$ str2 = "Beberapa nama fail dengan versi 123";
echo "String: '{$ str2}' -> Hasil ekstrak:". (ExtractNumberatend ($ str2) ?? "Tidak dipadankan"). Php_eol; // output: 123

$ str3 = "Single_file 99";
echo "String: '{$ str3}' -> Hasil ekstrak:". (ExtractNumberatend ($ str3) ?? "Tidak dipadankan"). Php_eol; // output: 99

echo php_eol. "--- perlawanan tidak sah ---". Php_eol;
$ str4 = "1212"; // Mula dengan ruang echo "String: '{$ str4}' -> Hasil ekstrak:". (ExtractNumberatend ($ str4) ?? "tidak sepadan"). Php_eol; // output: tidak dipadankan $ str5 = "filename123"; // Tiada ruang yang dipisahkan echo "String: '{$ str5}' -> Hasil ekstrak:". (ExtractNumberatend ($ str5) ?? "Tidak dipadankan"). Php_eol; // output: tidak dipadankan $ str6 = "nama fail 123"; // Terdapat ruang selepas nombor echo "String: '{$ str6}' -> Hasil ekstrak:". (ExtractNumberatend ($ str6) ?? "tidak dipadankan"). Php_eol; // output: tidak dipadankan $ str7 = "tiada nombor di sini"; // Tiada nombor echo "String: '{$ str7}' -> Hasil ekstrak:". (ExtractNumberatend ($ str7) ?? "Tidak dipadankan"). Php_eol; // output: tidak dipadankan $ str8 = "1234 lkjsdhf ldjfh 1223"; // pelbagai ruang echo "String: '{$ str8}' -> Extract Result:". (ExtractNumberatend ($ str8) ?? "Tidak dipadankan"). Php_eol; // output: 1223
?>

Dalam contoh di atas, $ perlawanan [1] akan mengandungi nombor yang ditangkap. Jika perlawanan gagal, preg_match mengembalikan 0, dan array perlawanan $ tidak akan diisi.

4. Langkah berjaga -jaga dan amalan terbaik

  1. Kepentingan titik utama ( ^ dan $): ^ dan $ memastikan bahawa ungkapan biasa sepadan dengan keseluruhan rentetan, bukan substring dalam rentetan. Ini penting untuk memadankan permulaan dan akhir rentetan.
  2. Peranan \ s: \ s adalah kunci untuk mencegah rentetan dari awal dengan ruang. Jika anda membenarkan untuk memulakan dengan ruang, anda boleh menghilangkan atau menggantikannya.
  3. Kumpulan menangkap (()): Gunakan kurungan () untuk membuat kumpulan penangkapan supaya preg_match dapat mengekstrak nombor yang sepadan secara berasingan. Dalam kes ini, (\ d) adalah kumpulan penangkapan pertama dan hanya, jadi hasilnya disimpan dalam $ perlawanan [1].
  4. Pengendalian ralat: Sentiasa periksa nilai pulangan preg_match. Jika 0 dikembalikan, tiada perlawanan ditemui, dan anda tidak boleh cuba mengakses array $ perlawanan untuk mengelakkan amaran atau kesilapan PHP.
  5. Corak Pembatas: Dalam PHP, ungkapan biasa perlu dibungkus dengan pembatas, seperti /.../, # ... # atau ~ ... ~. Pilih watak yang tidak muncul di dalam corak sebagai pembatas.
  6. \ b (sempadan perkataan) Pilihan: \ b (\ b \ d) disebut dalam jawapan soalan asal. Dalam contoh ini, kerana bilangannya mempunyai ruang yang jelas sebelum itu dan pada akhir rentetan, kesan \ b agak kecil, kerana ruang sudah memainkan peranan sempadan perkataan. Tetapi jika coraknya lebih kompleks, \ b dapat membantu memastikan perlawanan itu adalah "perkataan" yang lengkap dan bukannya sebahagian daripada perkataan. Untuk ^\ S.* (\ d) $, ia sudah cukup mantap.

5. Ringkasan

Dengan ekspresi biasa yang dibina dengan teliti ^\ S.* (\ d) $, kita boleh mengekstrak nombor dengan cekap dan tepat yang memenuhi syarat -syarat tertentu dari akhir rentetan. Memahami peranan setiap metacharacter, terutamanya sauh ^ dan $ dan watak-watak bukan Whitespace \ s, adalah kunci untuk menulis ungkapan biasa yang mantap. Kaedah ini bukan sahaja mengelakkan operasi kompleks seperti penyongsangan rentetan, tetapi juga meningkatkan kebolehbacaan dan penyelenggaraan kod.

Atas ialah kandungan terperinci Amalan PHP Preg_match: Panduan untuk mengekstrak digit dengan tepat pada akhir rentetan. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Stock Market GPT

Stock Market GPT

Penyelidikan pelaburan dikuasakan AI untuk keputusan yang lebih bijak

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas

Bagaimana cara memeriksa sama ada alamat e -mel sah dalam php? Bagaimana cara memeriksa sama ada alamat e -mel sah dalam php? Sep 21, 2025 am 04:07 AM

UseFilter_var () TOVALIDATEMailSyntaxandCheckDnsrr () TOVERIFYDOnMAINMXRECORDS.example: $ e -mel = "user@example.com"; if (filter_var ($ e -mel, filter_email) && checkDnsrr (expode '

Bagaimana untuk menggabungkan dua tatasusunan dalam PHP? Bagaimana untuk menggabungkan dua tatasusunan dalam PHP? Sep 21, 2025 am 12:26 AM

UseArray_Merge () toCombineArrays, OverwritingDuplicateStringKeySandreIndexingNumericKeys; forsimplerconcatenation, terutamaInphp5.6, usethesplatoperator [... $ array1, ... $ array2].

Bagaimana membuat salinan atau klon objek yang mendalam dalam php? Bagaimana membuat salinan atau klon objek yang mendalam dalam php? Sep 21, 2025 am 12:30 AM

UseUnserialize (Serialize ($ obj)) fordeepcopyingWhenallDataisserizable; jika tidak, pelaksanaan__clone () tomanuallyduplicatenestedObjectsandavoidsharedReferences.

MySQL Agregasi Bersyarat: Gunakan Penyataan Kes untuk Melaksanakan Sumsum dan Mengira Kondisi Simpanan MySQL Agregasi Bersyarat: Gunakan Penyataan Kes untuk Melaksanakan Sumsum dan Mengira Kondisi Simpanan Sep 16, 2025 pm 02:39 PM

Artikel ini membincangkan secara mendalam bagaimana menggunakan pernyataan kes untuk melakukan pengagregatan bersyarat di MySQL untuk mencapai penjumlahan bersyarat dan mengira bidang tertentu. Melalui kes sistem langganan praktikal, ia menunjukkan bagaimana secara dinamik mengira jumlah tempoh dan bilangan peristiwa berdasarkan status rekod (seperti "akhir" dan "membatalkan"), dengan itu mengatasi batasan fungsi jumlah tradisional yang tidak dapat memenuhi keperluan pengagregatan bersyarat kompleks. Tutorial menganalisis penerapan pernyataan kes dalam jumlah fungsi secara terperinci dan menekankan pentingnya bersatu ketika berurusan dengan nilai nol yang mungkin dari gabungan kiri.

Bagaimana cara menggunakan ruang nama dalam projek PHP? Bagaimana cara menggunakan ruang nama dalam projek PHP? Sep 21, 2025 am 01:28 AM

Namespacesinphporganizecodeandpreventnamingnamingconflictsbygroupinglasses, antara muka, fungsi, dan constantsunderaspecificname.2.defineAnamespaceusingthenamespaceywordetopofafile, diikuti olehbythenamespaceakenam

Apakah kaedah sihir dalam php dan memberikan contoh `__call ()` dan `__get ()`. Apakah kaedah sihir dalam php dan memberikan contoh `__call ()` dan `__get ()`. Sep 20, 2025 am 12:50 AM

The__call () methodistriggeredWhenaninaccessibleorundefinedmethodiscalledonanObject, membolehkanCustomHandlylyAccepteThemeThodnamnamnamnents, asshownwhencallingundefinedmethodslikesayhello ()

Bagaimana untuk mengemas kini rekod dalam pangkalan data dengan PHP? Bagaimana untuk mengemas kini rekod dalam pangkalan data dengan PHP? Sep 21, 2025 am 04:47 AM

Toupdateadatabaserecordinphp, firstConnectusingPdoormySqli, thenusePePreparedStatementStoExecuteAseCureSqlupDateQuery.example: $ pdo = newpdo ("mysql: host = localhost; dbName = your_database: $ userbase: $ userbase"

Bagaimana untuk mendapatkan sambungan fail dalam PHP? Bagaimana untuk mendapatkan sambungan fail dalam PHP? Sep 20, 2025 am 05:11 AM

UsePathinfo ($ FileName, pathinfo_extension) togetthefileextension; itreliLyHandlesmultipledotsandgecases, returnTheExtension (mis., "Pdf") Oranemptystringifnoneexists.

See all articles