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
Linda Hamiltonasal
2024-11-21 10:19:10906semak imbas

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);

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 = ...
}

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)]]);
}

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);

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;
}

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!

Kenyataan:
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