在程序里第二个常出现的就是字串处理啦
连接运算子 | 说明 | 用法 |
---|---|---|
. |
连接 | 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) |
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)/ |
>>: Day 8 情报收集 - Information Gathering (SSL Analysis)
今天这个,真的是插班车,因为今天作完弱扫,总共八份的测报。 我自已看得都要吐了。 在思考,这个月,因...
前言 React.js 是一套 JavaScript 函式库,而其写法也的确如同其字面上意思,写起来...
此系列文章会同步发文到个人部落格,有兴趣的读者可以前往观看喔。 当测试脚本有重复的地方,除了可以写...
声明一下 这边要声明一下,这一篇其实应该出现在 Day07 的内容之前才对,所以,如果真的有读者 f...
本篇内容来自於我在Medium上写的一篇文章:Swift 语法再读#1 [Between Struc...