printf('<p>%s</p>', $s);
var_dump($s);
$res = preg_replace('/\//', '@', $s);
printf('<p>%s</p><hr>', $res);
//----------------------------
$s = '\\a\\b';
printf('<p>%s</p>', $s);
var_dump($s);
$res = preg_replace('/\\\\/', '@', $s);
printf('<p>%s</p><hr>', $res);
//----------------------------
$s = '\a\b';
printf('<p>%s</p>', $s);
var_dump($s);
$res = preg_replace('/\\\\/', '@', $s);
printf('<p>%s</p><hr>', $res);
----------------------------------------------------------
'/\\\\/' => php string = /\\/ => reg = /\/(匹配 '\')
'///' => php string = /// => reg = error
'/\//' => php string = /\// => reg = ///(匹配 '/')
----------------------------------------------------------
對 php preg來說 (/) 也屬於保留字
----------------------------------------------------------
PHP的跳脫字元
對 "" 來說,對''無用
\$ 顯示金錢符號 $
\" 顯示雙引號符號 "
\' 顯示單引號符號 '
\\ 顯示倒斜線符號 \
\b Backspace鍵
\n 換行符號<br>
\r Return 歸位字元
\t Tab鍵
\000 ~ \377 以16進位表示某一個字元
\x00 ~ \xFF 以8進位表示某一個字元
單引號 ' ' 是連跳脫字元都不處理,也就是 \n 會當成 \ 和 n ,而不是換行!這點要特別注意!很多 bug 就是由此而來,例如 str_replace \n 沒有作用之類的。
附帶一提,雖然單引號 ' ' 裡面不處理跳脫字元,但在單引號 ' ' 裡面要寫 (') 或 (\) 還是要記得跳脫一下,不然 PHP 會無法判斷字串結尾︰
<?php echo '\''; // 會印 ' echo '\\'; // 會印 \ ?>
PHP preg_quote() 函數
PHP 正則表達式(PCRE)preg_last_error 函數用於轉義正則表達式字符。
語法
string preg_quote ( string $str [, string $delimiter = NULL ] ) preg_quote() 需要參數 str 並向其中 每個正則表達式語法中的字符前增加一個反斜線。 這通常用於你有一些運行時字符串 需要作為正則表達式進行匹配的時候。正則表達式特殊字符有: . \ + * ? [ ^ ] $ ( ) { } = ! < > | : -
參數說明:
- $str: 輸入字符串。
- $delimiter: 如果指定了可選參數 delimiter,它也會被轉義。這通常用於 轉義 PCRE 函數使用的分隔符。 / 是最通用的分隔符。
返回值
返回轉義後的字符串。實例
實例 1
$keywords = '$40 for a g3/400';
$keywords = preg_quote($keywords, '/');
echo $keywords;
返回 \$40 for a g3\/400
將文本中的單詞替換為斜體
//在這個例子中,preg_quote($word) 用於保持星號原文涵義,使其不使用正則表達式中的特殊語義。
$textbody = "This book is *very* difficult to find.";
$word = "*very*";
$textbody = preg_replace ("/" . preg_quote($word) . "/",
"<i>" . $word . "</i>",
$textbody);
echo $textbody;
This book is <i>*very*</i> difficult to find.