Berikut ini adalah kumpulan kode fungsi umum ekspresi reguler di PHP untuk memudahkan pembelajaran ekspresi reguler PHP
preg_grep.
(PHP 4, PHP 5)
preg_grep -- Mengembalikan pola pencocokan deskripsi sel array
array preg_grep ( pola string, input array [, int flags] )
preg_grep() Mengembalikan array yang berisi sel-sel dalam array input yang cocok dengan pola pola yang diberikan.
flag dapat berupa flag berikut:
PREG_GREP_INVERT
Jika diteruskan dalam tanda ini, preg_grep() mengembalikan sel dalam larik masukan yang tidak cocok dengan pola yang diberikan. Tag ini tersedia sejak PHP 4.2.0.
Pada PHP 4.0.4, hasil yang dikembalikan oleh preg_grep() diindeks menggunakan kunci dari array input. Jika Anda tidak menginginkan hasil seperti itu, gunakan array_values() untuk mengindeks ulang hasil yang dikembalikan oleh preg_grep().
Di atas adalah deskripsi preg_grep() di manual. Pertama-tama, ini adalah fungsi reguler yang kompatibel dengan Perl, jadi menurut saya preg_grep berarti p(Perl)reg(regular)_grep. Karakteristiknya adalah dapat digunakan untuk array cocok dalam array multidimensi, dan dapat Mengembalikan array yang cocok atau tidak cocok melalui parameter flags. Efisiensinya jauh lebih cepat dibandingkan menggunakan struktur foreach(...){if...} (tidak terverifikasi), dan dapat mencocokkan pola yang kompleks. Ini sangat berguna dalam aplikasi seperti pencarian dan penyortiran.
contoh:
<?
$arr = array('abc'=>12.213,'bb'=>12345,'ba'=>23.2321,34.3,'23'=>'3.3','23434'=>'bbb');
// Mengembalikan semua elemen array yang berisi angka floating point.
$fl_array = preg_grep ("/^(d+)?.d+$/", $arr);
print_r($fl_array);
?>
preg_match
(PHP 3 >= 3.0.9, PHP 4, PHP 5)
preg_match -- Instruksi pencocokan ekspresi reguler
int preg_match (string pattern, string subject [, array match [, int flags]] )
mencari string subjek untuk konten yang cocok dengan ekspresi reguler yang diberikan oleh pola.
Jika kecocokan diberikan, maka akan diisi dengan hasil pencarian. $matches[0] akan berisi teks yang cocok dengan keseluruhan pola, $matches[1] akan berisi teks yang cocok dengan subpola pertama yang diambil dalam tanda kurung, dan seterusnya.
flag dapat berupa flag berikut:
PREG_OFFSET_CAPTURE
Jika tanda ini disetel, offset string terkait juga akan dikembalikan untuk setiap kemunculan kecocokan. Perhatikan bahwa ini mengubah nilai array yang dikembalikan sehingga setiap sel di dalamnya juga merupakan array, dengan item pertama adalah string yang cocok dan item kedua adalah offsetnya. Tag ini tersedia sejak PHP 4.3.0.
Parameter flags tersedia sejak PHP 4.3.0.
preg_match() mengembalikan berapa kali pola cocok. Bisa 0 kali (tidak cocok) atau 1 kali, karena preg_match() akan berhenti mencari setelah kecocokan pertama. preg_match_all(), sebaliknya, akan mencari hingga akhir subjek. Jika terjadi kesalahan preg_match() mengembalikan FALSE.
Tip: Jika Anda hanya ingin melihat apakah satu string terdapat dalam string lain, jangan gunakan preg_match(). Anda dapat menggunakan strpos() atau strstr() sebagai gantinya, yang jauh lebih cepat.
Di atas adalah penjelasan preg_match() pada manualnya. Menurut saya fungsi dari fungsi ini adalah dapat digunakan untuk verifikasi yaitu apakah suatu string memenuhi persyaratan tertentu. Batasannya adalah seperti yang disebutkan di atas, cocok 0 kali atau 1 kali. Dan nilai kembaliannya adalah jumlah kecocokan. Ketika kecocokan penuh diperlukan, preg_match_all() dapat digunakan. Perlu juga disebutkan peran array $matches, yang dapat digunakan sebagai nilai kembalian pola mandiri, yang terkadang berguna.
Contoh:
<?
if (preg_match ("/(bwebb)s(d)/i", "PHP adalah bahasa skrip web 45 pilihan.",$match)) {
print "Ditemukan kecocokan.";
print_r($cocok);
} kalau tidak {
print "Tidak ditemukan kecocokan.";
}
?>
<?php
// Dapatkan nama host dari URL
preg_match("/^(http://)?([^/]+)/i",
" http://www.php.net/index.html ", $cocok);
$host = $cocok[2];
// Dapatkan dua segmen berikutnya dari nama host
preg_match("/[^./]+.[^./]+$/", $host, $matches);
echo "nama domain adalah: {$matches[0]}n";
?>
preg_match_all
(PHP 3 >= 3.0.9, PHP 4, PHP 5)
preg_match_all -- Melakukan pencocokan ekspresi reguler global Penjelasan fungsi ini di manual sangat jelas, jadi saya tidak akan menjelaskannya lebih lanjut.
menjelaskan
int preg_match_all (pola string, subjek string, kecocokan array [, bendera int])
mencari semua konten dalam subjek yang cocok dengan ekspresi reguler yang diberikan oleh pola dan memasukkan hasilnya ke dalam kecocokan dalam urutan yang ditentukan oleh bendera.
Setelah kecocokan pertama ditemukan, pencarian berikutnya dimulai pada akhir kecocokan sebelumnya.
flag dapat berupa kombinasi dari flag berikut (perhatikan bahwa tidak masuk akal menggunakan PREG_PATTERN_ORDER dan PREG_SET_ORDER secara bersamaan):
PREG_PATTERN_ORDER
Urutkan hasilnya sehingga $matches[0] adalah array dari semua pola yang cocok, $matches[1] adalah array string yang cocok dengan subpola di braket pertama, dan seterusnya.
<?php
preg_match_all ("|<[^>]+>(.*)</[^>]+>|U", "<b>contoh: </b><div align=left>ini adalah ujian</div >",
$keluar, PREG_PATTERN_ORDER);
cetak $keluar[0][0].", ".$keluar[0][1]."n";
cetak $keluar[1][0].", ".$keluar[1][1]."n";
?>
Contoh ini akan menampilkan:
<b>contoh: </b>, <div align=left>ini ujian</div>
Contoh: , ini adalah ujian
Oleh karena itu, $out[0] berisi string yang cocok dengan keseluruhan pola, dan $out[1] berisi string di antara sepasang tag HTML.
PREG_SET_ORDER
Urutkan hasilnya sehingga $matches[0] adalah larik kumpulan kecocokan pertama, $matches[1] adalah larik kumpulan kecocokan kedua, dan seterusnya.
<?php
preg_match_all ("|<[^>]+>(.*)</[^>]+>|U",
"<b>contoh: </b><div align=left>ini ujian</div>",
$keluar, PREG_SET_ORDER);
cetak $keluar[0][0].", ".$keluar[0][1]."n";
cetak $keluar[1][0].", ".$keluar[1][1]."n";
?>
Contoh ini akan menampilkan:
<b>contoh: </b>, contoh:
<div align=left>ini adalah ujian</div>, ini adalah ujian
Dalam contoh ini, $matches[0] adalah kumpulan hasil pencocokan pertama, $matches[0][0] berisi teks yang cocok dengan keseluruhan pola, $matches[0][1] berisi teks yang cocok dengan subpola pertama , diakhiri dengan Dan seterusnya. Demikian pula, $matches[1] adalah rangkaian pertandingan kedua, dan seterusnya.
PREG_OFFSET_CAPTURE
Jika tanda ini disetel, offset string terkait juga akan dikembalikan untuk setiap kemunculan kecocokan. Perhatikan bahwa ini mengubah nilai larik yang dikembalikan sehingga setiap sel juga merupakan larik, dengan item pertama adalah string yang cocok dan item kedua adalah offsetnya dalam subjek. Tag ini tersedia sejak PHP 4.3.0.
Jika tidak ada tag yang diberikan, PREG_PATTERN_ORDER diasumsikan.
Mengembalikan berapa kali seluruh pola cocok (mungkin nol), atau FALSE jika terjadi kesalahan.
Contoh 1. Dapatkan semua nomor telepon dari sebuah SMS
<?php
preg_match_all ("/(? (d{3})? )? (?(1) [-s] ) d{3}-d{4}/x",
"Hubungi 555-1212 atau 1-800-555-1212", $telepon);
?>
Contoh 2. Mencari tag HTML yang cocok (serakah)
<?php
// \2 adalah contoh referensi terbalik, artinya di PCRE adalah
// Harus cocok dengan konten dalam tanda kurung kedua dalam ekspresi reguler itu sendiri, dalam hal ini
// Itu ([w]+). Karena string dalam tanda kutip ganda, Anda memerlukannya
//Tambahkan garis miring terbalik tambahan.
$html = "<b>teks tebal</b><a href=howdy.html>klik saya</a>";
preg_match_all ("/(<([w]+)[^>]*>)(.*)(</\2>)/", $html, $matches);
untuk ($i=0; $i< count($cocok[0]); $i++) {
echo "cocok: ".$cocok[0][$i]."n";
echo "bagian 1: ".$cocok[1][$i]."n";
echo "bagian 2: ".$cocok[3][$i]."n";
echo "bagian 3: ".$matches[4][$i]."nn";
}
?>
preg_quote
(PHP 3 >= 3.0.9, PHP 4, PHP 5)
preg_quote -- keluar dari deskripsi karakter ekspresi reguler
string preg_quote ( string str [, string delimiter] )
preg_quote() menggunakan str sebagai parameter dan menambahkan garis miring terbalik di depan setiap karakter yang termasuk dalam sintaks ekspresi reguler. Jika Anda perlu mencocokkan string yang dihasilkan secara dinamis sebagai pola, Anda dapat menggunakan fungsi ini untuk menghindari karakter khusus yang mungkin ada di dalamnya.
Jika pembatas argumen opsional disediakan, karakter ini juga akan di-escape. Ini dapat digunakan untuk keluar dari pembatas yang diperlukan oleh fungsi PCRE. Pembatas yang paling umum digunakan adalah garis miring /.
Karakter khusus untuk ekspresi reguler meliputi: + * ? [ ^ ] $ ( ) {} = !
Catatan: Fungsi ini aman digunakan pada objek biner.
Di atas adalah penjelasan di manual yang sangat jelas, jadi saya tidak akan menjelaskan secara detail. Selain itu, ada catatan di manual bahwa fungsi ini dapat digunakan dengan aman untuk objek biner, yang sangat berguna.
Contoh: Contoh 1. contoh preg_quote()
<?php
$keywords = '$40 untuk g3/400';
$kata kunci = preg_quote($kata kunci, '/');
echo $kata kunci; // mengembalikan $40 untuk g3/400
?>
Contoh 2. Menambahkan huruf miring pada sebuah kata dalam teks
<?php
// Dalam contoh ini, preg_quote($word) digunakan untuk menghilangkan tanda bintang dari ekspresi reguler
// Memiliki arti khusus.
$textbody = "Buku ini *sangat* sulit ditemukan.";
$kata = "*sangat*";
$textbody = preg_replace ("/".preg_quote($kata)."/",
"<i>".$kata."</i>",
$badan teks);
?>
Langkah selanjutnya adalah menerapkan fungsi preg_replace yang super fleksibel, super bertenaga, dan super banyak digunakan.
preg_replace
(PHP 3 >= 3.0.9, PHP 4, PHP 5)
preg_replace – melakukan pencarian ekspresi reguler dan instruksi penggantian
preg_replace campuran (pola campuran, penggantian campuran, subjek campuran [, batas int])
mencari subjek yang cocok dengan pola pola dan menggantinya dengan penggantian. Jika batas ditentukan, hanya batas kecocokan yang akan diganti. Jika batas dihilangkan atau memiliki nilai -1, semua kecocokan akan diganti.
pengganti dapat berisi referensi balik dalam bentuk \n atau (sejak PHP 4.0.4) dalam bentuk $n, dengan yang terakhir lebih disukai. Setiap referensi tersebut akan diganti dengan teks yang cocok dengan subpola tanda kurung ke-n yang diambil. n dapat berkisar dari 0 hingga 99, dengan \0 atau $0 mengacu pada teks yang cocok dengan keseluruhan pola. Hitung tanda kurung kiri dari kiri ke kanan (mulai dari 1) untuk mendapatkan jumlah subpola.
Untuk pola penggantian yang mengikuti referensi balik dengan angka (yaitu, angka yang langsung mengikuti pola yang cocok), notasi \1 yang familiar tidak dapat digunakan untuk mewakili referensi balik. Misalnya, \11 akan membuat preg_replace() bingung apakah ingin referensi balik \1 diikuti dengan angka 1 atau referensi balik \11 . Solusi dalam hal ini adalah dengan menggunakan ${1}1. Ini menciptakan referensi balik yang terisolasi untuk $1, meninggalkan 1 lainnya hanya literal.
Jika ditemukan kecocokan, subjek yang diganti akan dikembalikan, jika tidak, subjek asli akan dikembalikan.
Setiap parameter preg_replace() (kecuali limit) dapat berupa array. Jika pola dan penggantinya adalah array, keduanya akan diproses sesuai urutan kemunculan kuncinya dalam array. Ini belum tentu sama dengan urutan numerik pada indeks. Jika indeks digunakan untuk mengidentifikasi pola mana yang harus diganti dengan penggantinya, array harus diurutkan dengan ksort() sebelum memanggil preg_replace().
Jika subjek adalah array, pencarian dan penggantian dilakukan pada setiap item dalam subjek dan array dikembalikan.
Jika pattern dan replacement keduanya merupakan array, preg_replace() akan mengambil nilainya untuk mencari dan mengganti subjek. Jika nilai penggantinya lebih sedikit daripada nilai dalam pola, string kosong digunakan sebagai nilai pengganti yang tersisa. Jika pola adalah array dan penggantinya adalah string, string ini digunakan sebagai nilai pengganti untuk setiap nilai dalam pola. Sebaliknya tidak ada artinya.
Pengubah /e menyebabkan preg_replace() memperlakukan argumen pengganti sebagai kode PHP (setelah referensi balik yang sesuai diganti). Tip: Pastikan penggantian membentuk string kode PHP yang valid, jika tidak, PHP akan melaporkan kesalahan penguraian sintaksis pada baris yang berisi preg_replace().
Catatan: Parameter batas ditambahkan setelah PHP 4.0.1pl2.
Menurut saya kekuatannya adalah tidak hanya dapat menangani string, tetapi juga array, dan fungsi referensi terbaliknya sangat fleksibel. Pada dasarnya, ini dapat memenuhi sebagian besar kebutuhan pengguna biasa. Jika tidak kompeten, kami juga memiliki fungsi preg_replace_callback(), yang dapat menyesuaikan fungsi panggilan balik untuk memenuhi persyaratan lanjutan Anda. Seperti mendesain filter, dll.
preg_replace_callback
(PHP 4 >= 4.0.5, PHP 5)
preg_replace_callback -- Gunakan fungsi panggilan balik untuk melakukan pencarian ekspresi reguler dan instruksi penggantian
campuran preg_replace_callback (pola campuran, panggilan balik panggilan balik, subjek campuran [, batas int])
Fungsi ini berperilaku hampir seperti preg_replace(), kecuali bahwa alih-alih memberikan parameter pengganti, fungsi panggilan balik ditentukan. Fungsi ini mengambil input array kecocokan dalam string target dan mengembalikan string yang digunakan sebagai pengganti.
Contoh 1. contoh preg_replace_callback()
<?php
// Teks ini untuk tahun 2002,
// Sekarang ingin membuatnya tersedia untuk tahun 2003
$text = "Hari April Mop adalah 01/04/2002n";
$text.= "Natal terakhir adalah 24/12/2001n";
// fungsi panggilan balik
fungsi tahun_berikutnya($cocok) {
// Biasanya: $matches[0] adalah kecocokan yang lengkap
// $matches[1] cocok untuk subpola di braket pertama
// dan seterusnya
kembalikan $pertandingan[1].($pertandingan[2]+1);
}
gema preg_replace_callback(
"|(d{2}/d{2}/)(d{4})|",
"tahun_depan",
$teks);
//Hasilnya adalah:
// Hari April Mop adalah 01/04/2003
// Natal lalu adalah 24/12/2002
?>
Anda sering kali memerlukan fungsi panggilan balik untuk preg_replace_callback() hanya di satu tempat. Dalam hal ini, Anda dapat menggunakan create_function() untuk mendeklarasikan fungsi anonim sebagai panggilan balik dalam panggilan ke preg_replace_callback() simpan semua informasi untuk panggilan di satu tempat dan jangan mengacaukan ruang nama fungsi dengan nama fungsi panggilan balik yang tidak digunakan di tempat lain.
Bagi sobat yang menggunakan fungsi preg_replace_callback() mungkin pasti membutuhkan fungsi callback (kalau tidak kenapa harus dipakai? Bukankah lebih baik langsung menggunakan preg_replace), namun seringkali hanya digunakan di satu tempat saja. Dalam hal ini Anda dapat menggunakan create_function() untuk mendeklarasikan fungsi anonim sebagai fungsi panggilan balik dari preg_replace_callback(). Dengan cara ini, kita memenuhi kebutuhan untuk mendeklarasikan informasi tanpa bingung dengan nama fungsi yang tidak akan digunakan lagi.
Contoh 2. preg_replace_callback() dan create_function()
<?php
/* Filter baris perintah bergaya UNIX yang menghapus string di awal setiap paragraf
*Mengubah huruf besar menjadi huruf kecil*/
$fp = fopen("php://stdin", "r") or die("tidak dapat membaca stdin");
sementara (!feof($fp)) {
$baris = fget($fp);
$baris = preg_replace_callback(
'|<p>s*w|',
buat_fungsi(
// Penggunaan tanda kutip tunggal disini sangat penting,
// Jika tidak, ganti semua $ dengan $
'$cocok',
'kembalikan strtolower($cocok[0]);'
),
$garis
);
gema $baris;
}
fclose($fp);
?>
Akhirnya
preg_split
(PHP 3 >= 3.0.9, PHP 4, PHP 5)
preg_split – Pisahkan string menggunakan ekspresi reguler. Saya tidak akan membahas detailnya di sini.
menjelaskan
array preg_split ( pola string, subjek string [, batas int [, bendera int]] )
mengembalikan larik yang berisi substring dalam pemisahan subjek sepanjang pola pencocokan batas.
Jika batas ditentukan, paling banyak substring batas dikembalikan. Jika batas adalah -1, berarti tidak ada batas dan dapat digunakan untuk terus menentukan tanda parameter opsional.
flag dapat berupa kombinasi dari flag berikut (dikombinasikan dengan operator bitwise OR | ):
PREG_SPLIT_NO_EMPTY
Jika tanda ini disetel, preg_split() hanya mengembalikan komponen yang tidak kosong.
PREG_SPLIT_DELIM_CAPTURE
Jika tanda ini disetel, ekspresi tanda kurung dalam pola pembatas juga diambil dan dikembalikan. Tag ini ditambahkan di PHP 4.0.5.
PREG_SPLIT_OFFSET_CAPTURE
Jika tanda ini disetel, offset string terkait dari setiap kemunculan hasil pencocokan juga akan dikembalikan. Perhatikan bahwa ini mengubah nilai larik yang dikembalikan sehingga setiap sel juga merupakan larik, dengan item pertama adalah string yang cocok dan item kedua adalah offsetnya dalam subjek. Tag ini tersedia sejak PHP 4.3.0.
Tip: Jika Anda tidak memerlukan kekuatan ekspresi reguler, Anda dapat memilih untuk menggunakan alternatif yang lebih cepat (dan sederhana) seperti meledak() atau str_split().