Rumah > pembangunan bahagian belakang > tutorial php > Bagaimanakah Saya Boleh Mengoptimumkan Penggantian Pemegang Tempat Rentetan Menggunakan Ungkapan Biasa?

Bagaimanakah Saya Boleh Mengoptimumkan Penggantian Pemegang Tempat Rentetan Menggunakan Ungkapan Biasa?

Linda Hamilton
Lepaskan: 2024-11-21 10:19:10
asal
881 orang telah melayarinya

How Can I Optimize String Placeholder Substitution Using Regular Expressions?

Mengoptimumkan Penggantian Pemegang Tempat Rentetan dengan RegEx

Fungsi dynStr() bertujuan untuk mencari dan menggantikan pembolehubah pemegang tempat dalam rentetan tertentu, dilambangkan dengan kurungan kerinting. Walaupun ia berfungsi dengan betul, kecekapan dan kesederhanaannya boleh dipertingkatkan.

Satu isu utama dengan dynStr() terletak pada struktur tatasusunan dua untuk $matches. Menggunakan dua gelung foreach untuk mengakses data yang dikehendaki adalah tidak cekap. Pertimbangkan untuk memudahkan ungkapan biasa untuk mengekstrak terus pembolehubah pemegang tempat tanpa memerlukan pemprosesan selanjutnya:

preg_match_all('/{\w+}/', $str, $matches);
Salin selepas log masuk

Seterusnya, gelung untuk menggantikan pembolehubah ruang letak boleh dioptimumkan. Pendekatan semasa menggunakan beberapa operasi manipulasi rentetan dan carian tatasusunan, menjadikannya tidak perlu rumit:

foreach($match_group as $match) {
    // ...
    $str = ...
}
Salin selepas log masuk

Alternatif yang lebih mudah dan lebih ringkas ialah menggunakan panggilan fungsi tunggal, menggantikan pemegang tempat secara terus:

foreach($matches[0] as $match) {
    $str = strtr($str, [$match => $vars[strtolower($match)]]);
}
Salin selepas log masuk

Fungsi strtr() melaksanakan berbilang penggantian dengan cekap dengan mentakrifkan pemetaan antara pembolehubah pemegang tempat dan nilai sepadannya dalam tatasusunan $vars.

Selain itu, fungsi boleh dibuat tidak peka huruf besar-kecil dengan menukar kedua-dua pembolehubah pemegang tempat dan kekunci tatasusunan kepada huruf kecil, menghapuskan keperluan untuk pemprosesan tambahan:

$allowed = array_keys(array_change_key_case($vars, CASE_LOWER));
...
$str = (in_array(strtolower($match), $allowed)) ? str_replace("{".$match_up."}", $vars[strtolower($match)], $str) : str_replace("{".$match_up."}", '', $str);
Salin selepas log masuk

Menggabungkan pengoptimuman ini menghasilkan fungsi dynStr() yang lebih cekap dan diperkemas:

function dynStr($str,$vars) {
    preg_match_all('/{\w+}/', $str, $matches);
    foreach($matches[0] as $match) {
        $vars = array_change_key_case($vars, CASE_LOWER);
        $str = strtr($str, [$match => $vars[strtolower($match)]]);
    }
    return $str;
}
Salin selepas log masuk

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengoptimumkan Penggantian Pemegang Tempat Rentetan Menggunakan Ungkapan Biasa?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan