Apakah ada fungsi PHP yang dapat keluar dari pola regex sebelum diterapkan?
Saya mencari sesuatu di sepanjang garis Regex.Escape()
fungsi C # .
Apakah ada fungsi PHP yang dapat keluar dari pola regex sebelum diterapkan?
Saya mencari sesuatu di sepanjang garis Regex.Escape()
fungsi C # .
Jawaban:
preg_quote()
adalah apa yang Anda cari:
Deskripsi
string preg_quote ( string $str [, string $delimiter = NULL ] )
preg_quote () membutuhkan
str
dan menempatkan backslash di depan setiap karakter yang merupakan bagian dari sintaks ekspresi reguler. Ini berguna jika Anda memiliki string run-time yang harus Anda cocokkan dalam beberapa teks dan string mungkin berisi karakter regex khusus.Karakter ekspresi reguler khusus adalah:
. \ + * ? [ ^ ] $ ( ) { } = ! < > | : -
Parameter
str
String input.
pembatas
Jika pembatas opsional ditentukan, itu juga akan lolos. Ini berguna untuk keluar dari pembatas yang diperlukan oleh fungsi PCRE. / Adalah pembatas yang paling umum digunakan.
Yang penting, perhatikan bahwa jika $delimiter
argumen tersebut tidak ditentukan, pembatas - karakter yang digunakan untuk melampirkan regex Anda, biasanya garis miring ( /
) - tidak akan keluar. Anda biasanya ingin melewati pembatas apa pun yang Anda gunakan dengan regex Anda sebagai$delimiter
argumen.
preg_match
untuk menemukan kemunculan URL yang diberikan dikelilingi oleh spasi putih:$url = 'http://stackoverflow.com/questions?sort=newest';
// preg_quote escapes the dot, question mark and equals sign in the URL (by
// default) as well as all the forward slashes (because we pass '/' as the
// $delimiter argument).
$escapedUrl = preg_quote($url, '/');
// We enclose our regex in '/' characters here - the same delimiter we passed
// to preg_quote
$regex = '/\s' . $escapedUrl . '\s/';
// $regex is now: /\shttp\:\/\/stackoverflow\.com\/questions\?sort\=newest\s/
$haystack = "Bla bla http://stackoverflow.com/questions?sort=newest bla bla";
preg_match($regex, $haystack, $matches);
var_dump($matches);
// array(1) {
// [0]=>
// string(48) " http://stackoverflow.com/questions?sort=newest "
// }
$delimiter
argumen, deskripsi argumen itu dari dokumen, klarifikasi untuk yang bingung tentang persis apa artinya, dan banyak berkomentar contoh menunjukkan preg_quote
sedang digunakan dalam kasus paling sederhana saya bisa datang dengan di mana itu sebenarnya digunakan untuk secara sistematis membentuk regex dan memasukkannya ke dalam preg_*
fungsi lain (karena kalau tidak, apa gunanya?). Jangan ragu untuk mengembalikan jika Anda tidak suka perubahan.
Akan jauh lebih aman untuk menggunakan Pola Disiapkan dari pustaka T-Regx :
$url = 'http://stackoverflow.com/questions?sort=newest';
$pattern = Pattern::prepare(['\s', [$url], '\s']);
// ↑ $url is quoted
kemudian lakukan pencocokan t-regx normal :
$haystack = "Bla bla http://stackoverflow.com/questions?sort=newest bla bla";
$matches = $pattern->match($haystack)->all();
$delimiter
argumen kedua untukpreg_quote()
itu tidak akan luput dari pembatas , bahkan "default" (atau yang paling umum)/
.