星期一, 九月 22, 2008
PHP 為 Regex 加跳脫字元 的 function: quotemeta
使用 Regular expression 時, 有以下這些特殊用途的符號:
. \ + * ? [ ^ ] ( $ )
若要處理某些輸入, 直接丟給 preg_match / preg_replace.. 等 使用, 就會有出乎意料外的結果.
要避免此意外, 丟進去前, 要先將那字串做處理, quotemeta 會 對特殊用途的符號加上 跳脫字元(backslash)"\".
例如:
<?php
$str = 'ooxx...book+pen...123';
$ex = 'book+pen';
print_r(preg_replace("/$ex/", '', $str)); // ooxx...book+pen...123
$ex = quotemeta('book+pen');
print_r(preg_replace("/$ex/", '', $str)); // ooxx......123
?>
使用上述做法的主要用途在於 $ex 的變數, 是隨時做改變的. (function 的變數或是外來的變數等)
若是 固定字串, 有簡單又快速的方式處理:
<?php
$str = 'ooxx...book+pen...123';
print_r(preg_replace("/\Qbook+pen\E/", '', $str)); // ooxx......123
print_r(str_replace("book+pen", '', $str)); // ooxx......123
?>
附註:
- Regex 中: \Q\E 包住的字串, 會將此字串直接做取代,不會理會裡面的特殊符號.
- str_replace() 用來取代固定字串, 速度會比 preg_replace 快上 N 倍.
發表迴響
PS: 若無法留言, 請先確認是否有打開 JavaScript, 造成您的困擾, 實在萬分對不起 Orz...(如果無法留言, 勞煩可以發信給我好嗎? 謝謝.)
PS2: 若您的留言被誤判, 我都會再自行看過, 不需要一直重覆張貼~
PS2: 若您的留言被誤判, 我都會再自行看過, 不需要一直重覆張貼~





