在程式裡第二個常出現的就是字串處理啦
連接運算子 | 說明 | 用法 |
---|---|---|
. |
連接 | x . y |
.= |
連接並賦值 | x .= y |
在 PHP 中字串是用 .
連接,如果用 +
會變成數字相加
echo 3 . "2.5", "\n"; // 32.5
echo 3 + "2.5", "\n"; // 5.5
比較運算子 | 說明 | 用法 |
---|---|---|
== |
相等(值) | x == y |
!= |
不相等(值) | x != y |
=== |
相等(型別 and 值) | x === y |
!== |
不相等(型別 or 值) | x !== y |
< |
小於 | x < y |
> |
大於 | x > y |
>= |
大於 or 等於 | x >= y |
<= |
小於 or 等於 | x <= y |
<> |
大於 or 小於 | x <> y |
<=> |
小於返回 -1, 等於返回 0, 大於返回 1 | x <=> y |
除了檢查字串相等,其他的雖然也不會出錯,但應該很少會用到
大於小於會從第一個字開始往後比較
var_dump("a" == "b"); // bool(false)
var_dump("a" != "b"); // bool(true)
var_dump("a" === "b"); // bool(false)
var_dump("a" !== "b"); // bool(true)
var_dump("ac" < "b"); // bool(true)
var_dump("a" > "b"); // bool(false)
var_dump("a" >= "a"); // bool(true)
var_dump("a" <= "b"); // bool(true)
var_dump("a" <=> "b"); // int(-1)
單引號字串不處理「跳脫字元」與「變數解析」,只有兩種情況反斜線 \
有作用,分別是 \'
和 \\
echo '\'', "\n"; // '
echo '\\', "\n"; // \
echo '\n', "\n"; // \n
echo '$value', "\n"; // $value
序列 | 說明 |
---|---|
\n |
Enter (LF) |
\r |
Return (CR) |
\t |
TAB |
\\ |
\ |
\$ |
$ |
\" |
" |
跳脫字元最常用的就是換行 \n
了吧,另外在雙引號字串中要打 "
也會用到
echo "\"\n\$";
// "
// $
全部跳脫字元:https://www.php.net/manual/en/language.types.string.php#language.types.string.syntax.double
變數解析是一個很方便的功能,用字串連接的話,要打一堆 "
和 .
實在很麻煩
$age = 16;
echo "My age is " . $age . ".";
echo "My age is ${age}.";
函式 | 說明 | 用法 |
---|---|---|
echo |
輸出 | echo $a, $b, ... |
trim() |
清除頭尾字元 | trim($str, $a = "\t\n\r\0\x0B") |
strlen() |
長度 | strlen($str) |
strrev() |
反轉 | strrev($str) |
str_replace() |
取代 | str_replace($a, $b, $str) |
str_split() |
等分 | str_split($str, $len = 1) |
explode() |
分割 | explode($a, $str, $limit) |
implode() |
合併成字串 | implode($a, $array) |
strstr() |
以字串位置分割 | strstr($str, $a) |
substr() |
以位置與長度裁切 | substr($str, $start, $len) |
strpos() |
查找字串首次出現位置 | strpos($str, $a) |
mb_strpos() |
查找字串首次出現位置(UTF-8) | mb_strpos($str, $a) |
stripos() |
查找字串首次出現位置(不區分大小寫) | stripos($str, $a) |
mb_stripos() |
查找字串首次出現位置(不區分大小寫)(UTF-8) | mb_stripos($str, $a) |
strrpos() |
查找字串最後出現位置 | strrpos($str, $a) |
mb_strrpos() |
查找字串最後出現位置(UTF-8) | mb_strrpos($str, $a) |
strripos() |
查找字串最後出現位置(不區分大小寫) | strripos($str, $a) |
mb_strripos() |
查找字串最後出現位置(不區分大小寫)(UTF-8) | mb_strripos($str, $a) |
PHP 最為人詬病的地方就是一大堆差不多的函式,其實有很大一部分是有規則的
mb_
UTF-8 模式(需啟用 mbstring
)i
不區分大小寫r
從尾巴開始找所有字串函式:
最常見的函式應該就這兩個吧:
還有這個好用的網站:
最後是符號的說明:
表示式 | 說明 |
---|---|
\ |
避開特殊符號 |
\n |
Enter |
\r |
Return |
\t |
TAB |
\s |
空白 [\f\n\r\t\v ] |
\S |
非空白 [^\f\n\r\t\v ] |
\d |
數字 [0-9] |
\D |
非數字 [^0-9] |
\w |
數字、字母或底線 [0-9A-Za-z_] |
\W |
非數字、字母和底線 [^0-9A-Za-z_] |
. |
除了換行以外的任意字元 [^\r\n] |
[m-n] |
m ~ n 其中一個 |
[^m-n] |
不能是 m ~ n 其中一個 |
[xyz] |
x 或 y 或 z |
[^xyz] |
非(x 和 y 和 z) |
^ |
字串開頭 |
$ |
字串結尾 |
* |
0 次或很多次 |
+ |
1 次或很多次 |
? |
0 次或 1 次 |
{n} |
n 次 |
{n,} |
n 次到無限次 |
{n,m} |
n ~ m 次 |
`(X | Y)` |
`(?:X | Y)` |
`(?>X | Y)` |
(?<=Y)X |
X 前面必須是 Y |
(?<!Y)X |
X 前面不行是 Y |
X(?=Y) |
X 後面必須是 Y |
X(?!Y) |
X 後面不行是 Y |
(?F)X |
X 以修飾符 F 方式匹配 |
(?F:X)Y |
X 以修飾符 F 方式匹配,Y 則否 |
修飾符 | 說明 |
---|---|
i |
不區分大小寫 |
m |
^ 和 $ 匹配行首和行尾 |
s |
. 匹配所有字元,包含 \r \n |
U |
非貪婪模式(盡可能少匹配) |
u |
匹配 UTF-8 字元 |
所有修飾符:https://www.php.net/manual/en/reference.pcre.pattern.modifiers.php
$str = 'abcaaabbacaa';
preg_match_all('/(?:.+)a+/', $str, $m);
print_r($m[0]);
// [0] => abcaaabbacaa
preg_match_all('/(?:.+)a+/U', $str, $m);
print_r($m[0]);
// [0] => abca
// [1] => aa
// [2] => bba
// [3] => ca
preg_match_all('/(?U:.+)a+/', $str, $m);
print_r($m[0]);
// [0] => abcaaa
// [1] => bba
// [2] => caa
preg_match_all('/(?>(?U:.+))a+/', $str, $m);
print_r($m[0]);
// [0] => caaa
// [1] => ba
// [2] => caa
preg_match_all('/(?>.+)a+/', $str, $m);
print_r($m[0]);
// no match
preg_match_all('/(?>.+)a+/U', $str, $m);
print_r($m[0]);
// [0] => ca
// [1] => aa
// [2] => ba
// [3] => ca
preg_match_all('/a{2}/', $str, $m);
print_r($m[0]);
// [0] => aa
// [1] => aa
preg_match_all('/(?<!a)a{2}(?!a)/', $str, $m);
print_r($m[0]);
// [0] => aa
/(?:.+)a+/ |
/(?:.+)a+/U |
/(?U:.+)a+/ |
/(?>(?U:.+))a+/ |
/(?>.+)a+/ |
/(?>.+)a+/U |
/a{2}/ |
/(?<!a)a{2}(?!a)/ |