[MySQL][PHP][跳脫字元] – 當 MySQL LIKE %% 碰到特殊字元
QUERY =>
SELECT *
FROM `ecstart_smartit_list`
WHERE 1 AND `custodian`
LIKE ‘%珮\%’ LIMIT 0 , 30
NULL
SELECT *
FROM `ecstart_smartit_list`
WHERE 1 AND `custodian`
REGEXP ‘珮\\\’
RESULT=>
pcname ip mac organization custodian
100-36020009 192.27.1.35 00142a70494c 董事長室\ 董事長室 詹小珮
100-36021855 192.20.2.33 0018716f3362 董事長室\ 董事長室 陳珮如
100-36021863 0.0.0.0 0013026f61ce 董事長室\ 董事長室 江珮珴
SELECT *
FROM `ecstart_smartit_list`
WHERE 1 AND `custodian`
LIKE BINARY ‘%珮\\\%’
原理
The BINARY operator casts the string following it to a binary string. This is an easy way to force a column comparison to be done byte by byte rather than character by character. This causes the comparison to be case sensitive even if the column isn’t defined as BINARY or BLOB. BINARY also causes trailing spaces to be significant.
mysql>SELECT 'a' = 'A';-> 1 mysql>SELECT BINARY 'a' = 'A';-> 0 mysql>SELECT 'a' = 'a ';-> 1 mysql>SELECT BINARY 'a' = 'a ';-> 0
ECMAScript/JavaScript 的 REGEX 規則是以 Perl 的規則為範本 (PHP 中稱為 PCRE 的內容) ,本文僅簡短說明幾個常見的字元意義。想了解更多用法者,請參看 Perl/PHP 的相關書籍,以及 ECMA-262 15.10 的內容。
1. ^
寫在 pattern 第一個位置時,表示其後一符號必須出現在字串開頭的位置。寫在 pattern 中間位置時則為否定之意,表示字串中不可有 ^ 之後一符號的內容。
2. $
寫在 pattern 最後一個位置時,表示其前一符號必須出現在字串尾端的位置。寫在 pattern 中時無特別意義。
3. *
表示字串中有 0 到無數個其前一符號的內容。
4. +
表示字串中有 1 到無數個其前一符號的內容。
5. ?
表示字串中有 0 到 1個其前一符號的內容。
6. { }
表示前一符號在字串中的重覆次數。例如 /A{2}/ 表示 ‘A’ 重覆兩次 (即 ‘AA’) ;/A{2,}/ 表示字串含有 2 到無數多個 ‘A’ ;/A{2,5}/ 表示含有 2 到 5 個 ‘A’ 。
7. .
表示一個任意字元。
8. [ ]
表示字串含有括號中任一字元的內容。可以 – 表示一組連續字元,例如 /[a-z]/, /[0-9]/ 。注意, [] 僅代表一個字元,例如 /[abc]/ 表示 ‘a’ 或 ‘b’ 或 ‘c’ ,而不是 ‘abc’ 。
9. ( )
表示一個 sub pattern ,符合 sub pattern 的字串內容會被存放在匹配陣列中,並依序指派數字代表此 sub pattern 。可以此數字在 pattern 的其他地方引用內容,例如 /The h([0-9]) means Title (\1)/ 表示第 1 個 sub pattern 是 0 到 9 的任一字元,而 \1 表示匹配的內容。故 ‘The h1 means Title 1′, ‘The h2 means Title 2′ 到 ‘The h9 means Title 9′ 符合規則。
10. \
表示轉義 (escaping) ,將其後的字元視為一般字元。例如要表示字串中含有 ‘/’ 字元時,就必須寫作 /\// 。
11. |
「或」意,字串中含有 ‘|’ 之前一符號或後一符號的內容。例如 /image\.(jpg|png)/ 表示 ‘image.jpg’ 或 ‘image.png’ 。通常會用 () 括住 ‘|’ 的前後符號。
12. \d
表示任何一個數字,意同 [0-9] 。
13. \D
表示任何一個非數字,意同 [^0-9] 。
14. \w
表示任何一個字元與數字以及 ‘_’ ,意同 [a-zA-Z0-9_] 。
15. \W
表示任何一個 \w 以外的字元。
16. \s
表示任何一個空白符號,包括 \t, \v 等。
17. \S
表示任何一個非空白符號。