diff --git a/docs/regex.html b/docs/regex.html index 88937917..05001314 100644 --- a/docs/regex.html +++ b/docs/regex.html @@ -142,7 +142,7 @@
范例 | 说明 |
---|---|
a? | 零个或一个a |
a* | 零个或多个 a |
a+ | 一个或多个a |
[0-9]+ | 0-9 中的一个或多个 |
a{3} | 正好 3 个 a |
a{3,} | 3个或更多的a |
a{3,6} | a 的 3 到 6 之间 |
a* | 贪心量词 |
a*? | 惰性量词 |
a*+ | 占有量词 |
使用 \
转义这些特殊字符
:- | - |
---|---|
(?(1)yes|no) | 条件语句 |
(?(R)yes|no) | 条件语句 |
(?(R#)yes|no) | 递归条件语句 |
(?(R&name)yes|no) | 条件语句 |
(?(?=...)yes|no) | 有条件的前瞻 |
(?(?<=...)yes|no) | 有条件的往后看 |
:- | - |
---|---|
(?=...) | 正先行断言 |
(?!...) | 负先行断言 |
(?<=...) | 正后发断言 |
(?<!...) | 负后发断言 |
?= | 正先行断言-存在 |
?! | 负先行断言-排除 |
?<= | 正后发断言-存在 |
?<! | 负后发断言-排除 |
零宽度断言 允许您在主模式之前(向后看)或之后(lookahead)匹配一个组,而不会将其包含在结果中。
+:- | - |
---|---|
(?R) | 递归整个模式 |
(?1) | 递归第一个子模式 |
(?+1) | 递归第一个相对子模式 |
(?&name) | 递归子模式name |
(?P=name) | 匹配子模式name |
(?P>name) | 递归子模式name |
:- | - |
---|---|
g | 全球的 |
m | 多行 |
i | 不区分大小写 |
x | 忽略空格 |
s | 单线 |
u | 统一码 |
X | 扩展 |
U | 不贪心 |
A | 锚 |
J | 重复的组名 |
:- | - |
---|---|
g | 全部 |
m | 多行 |
i | 不区分大小写 |
x | 忽略空格 |
s | 单线 |
u | 统一码 |
X | 扩展 |
U | 不贪心 |
A | 锚 |
J | 重复的组名 |
d | 结果包含捕获组子字符串开始和结束的索引 |
:- | - |
---|---|
(?R) | 递归整个模式 |
(?1) | 递归第一个子模式 |
(?+1) | 递归第一个相对子模式 |
(?&name) | 递归子模式name |
(?P=name) | 匹配子模式name |
(?P>name) | 递归子模式name |
:- | - |
---|---|
(?=...) | 正先行断言 |
(?!...) | 负先行断言 |
(?<=...) | 正后发断言 |
(?<!...) | 负后发断言 |
?= | 正先行断言-存在 |
?! | 负先行断言-排除 |
?<= | 正后发断言-存在 |
?<! | 负后发断言-排除 |
零宽度断言 允许您在主模式之前(向后看)或之后(lookahead)匹配一个组,而不会将其包含在结果中。
范例 | 说明 |
---|---|
ring | 匹配 |
. | 匹配 |
h.o | 匹配 |
ring\? | 匹配 |
\(quiet\) | 匹配 |
c:\\windows | 匹配 |
使用 \
搜索这些特殊字符:
[ \ ^ $ . | ? * + ( ) { }
范例 | 说明 |
---|---|
cat|dog | 匹配 |
id|identity | 匹配 |
identity|id | 匹配 |
当替代品重叠时,命令从长到短
-范例 | 说明 |
---|---|
[aeiou] | 匹配任何元音 |
[^aeiou] | 匹配一个非元音 |
r[iau]ng | 匹配 |
gr[ae]y | 匹配 |
[a-zA-Z0-9] | 匹配任何字母或数字 |
在 [ ]
中总是转义 . \ ]
有时是 ^ - .
范例 | 说明 |
---|---|
colou?r | 匹配 |
[BW]ill[ieamy's]* | 匹配 |
[a-zA-Z]+ | 匹配 1 个或多个字母 |
\d{3}-\d{2}-\d{4} | 匹配 SSN |
[a-z]\w{1,7} | 匹配 UW NetID |
范例 | 说明 |
---|---|
cat|dog | 匹配 |
id|identity | 匹配 |
identity|id | 匹配 |
当替代品重叠时,命令从长到短
+范例 | 说明 |
---|---|
[aeiou] | 匹配任何元音 |
[^aeiou] | 匹配一个非元音 |
r[iau]ng | 匹配 |
gr[ae]y | 匹配 |
[a-zA-Z0-9] | 匹配任何字母或数字 |
在 [ ]
中总是转义 . \ ]
有时是 ^ - .
范例 | 说明 |
---|---|
on(?:click|load) | 快于:on(click|load) |
范例 | 说明 |
---|---|
on(?:click|load) | 快于:on(click|load) |
尽可能使用非捕获或原子组
表达式 | 匹配示例 |
---|---|
(f|c|m)at\.? | The fat cat sat on the mat. |
如果想要匹配句子中的 .
则要写成 \.
以下这个例子 \.?
是选择性匹配.
^
号匹配指定开头或结尾的字符串就要使用到锚点。
+^
号 (符串的开头)表达式 | 匹配示例 |
---|---|
(T|t)he | The car is parked in the garage. |
^(T|t)he | The car is parked in the garage. |
$
号$
号 (否是最后一个)表达式 | 匹配示例 |
---|---|
(at\.) | The fat cat. sat. on the mat. |
(at\.)$ | The fat cat. sat. on the mat . |
表达式 | 匹配示例 |
---|---|
(at\.) | The fat cat. sat. on the mat. |
(at\.)$ | The fat cat. sat. on the mat. |
简写 | 描述 |
---|---|
. | 除换行符外的所有字符 |
\w | 匹配所有字母数字,等同于 [a-zA-Z0-9_] |
\W | 匹配所有非字母数字,即符号,等同于: [^\w] |
\d | 匹配数字: [0-9] |
\D | 匹配非数字: [^\d] |
\s | 匹配所有空格字符,等同于: [\t\n\f\r\p{Z}] |
\S | 匹配所有非空格字符: [^\s] |
\f | 匹配一个换页符 |
\n | 匹配一个换行符 |
\r | 匹配一个回车符 |
\t | 匹配一个制表符 |
\v | 匹配一个垂直制表符 |
\p | 匹配 CR/LF(等同于 \r\n ),用来匹配 DOS 行终止符 |
简写 | 描述 |
---|---|
. | 除换行符外的所有字符 |
\w | 匹配所有字母数字 等同于 [a-zA-Z0-9_] |
\W | 匹配所有非字母数字,即符号 等同于: [^\w] |
\d | 匹配数字: [0-9] |
\D | 匹配非数字: [^\d] |
\s | 匹配所有空格字符 等同于: [\t\n\f\r\p{Z}] |
\S | 匹配所有非空格字符: [^\s] |
\f | 匹配一个换页符 |
\n | 匹配一个换行符 |
\r | 匹配一个回车符 |
\t | 匹配一个制表符 |
\v | 匹配一个垂直制表符 |
\p | 匹配 CR/LF(等同于 \r\n )用来匹配 DOS 行终止符 |
正则表达式提供一些常用的字符集简写。
?=...
正先行断言:- | - | - |
---|---|---|
re.I | re.IGNORECASE | 忽略大小写 |
re.M | re.MULTILINE | 多行 |
re.L | re.LOCALE | 使 \w 、\b 、\s locale 依赖 |
re.S | re.DOTALL | 点匹配所有 (包括换行符) |
re.U | re.UNICODE | 使 \w 、\b 、\d 、\s unicode 依赖 |
re.X | re.VERBOSE | 可读风格 |
:- | :- |
---|---|
dotAll | 是否使用了 s 修饰符 |
flags | 返回标志的字符串 |
global | 是否使用了 g (全部)修饰符 |
hasIndices | 是否使用了 d 修饰符 |
ignoreCase | 匹配文本的时候是否忽略大小写 i |
multiline | 是否进行多行搜索 m |
lastIndex | 该索引表示从哪里开始下一个匹配 |
source | 正则表达式的文本 |
sticky | 搜索是否是 sticky |
unicode | Unicode 功能是否开启 |
:- | :- |
---|---|
match() | 获取匹配结果 |
matchAll() | 所有匹配项 |
replace() | 替换所有符合正则模式的匹配项 |
search() | 搜索以取得匹配正则模式的项 |
split() | 切割字符串返回字符串数组 |
compile() | (重新)编译正则表达式 |
exec() | 指定字符串中执行一个搜索匹配 |
test() | 正则表达式与指定的字符串是否匹配 |
toString() | 返回该正则表达式的字符串 |
let textA = 'I like APPles very much';
let textB = 'I like APPles';
let regex = /apples$/i
-// Output: false
-console.log(regex.test(textA));
-
-// Output: true
-console.log(regex.test(textB));
+console.log(regex.test(textA)); // false
+console.log(regex.test(textB)); // true
let text = 'I like APPles very much';
let regexA = /apples/;
let regexB = /apples/i;
-
-// Output: -1
-console.log(text.search(regexA));
-
-// Output: 7
-console.log(text.search(regexB));
+
+console.log(text.search(regexA)); // -1
+console.log(text.search(regexB)); // 7
let text = 'Do you like apples?';
let regex= /apples/;
-
// Output: apples
console.log(regex.exec(text)[0]);
-
// Output: Do you like apples?
console.log(regex.exec(text).input);
@@ -1930,12 +2028,25 @@
let result = text.replace(regex, 'mangoes');
console.log(result);
+/d/s.dotAll; // => true
+/d/g.global; // => true
+/d/ig.flags; // => "gi"
+/d/d.hasIndices; // => true
+/d/i.ignoreCase; // => true
+
+let s = "Please yes\nmake my day!";
+
+s.match(/yes[^]*day/);
+// 返回 'yes\nmake my day'
+
let regex = /apples/gi;
let text = 'Here are apples and apPleS';
-// Output: Here are mangoes and mangoes
-let result = text.replaceAll(regex, "mangoes");
-console.log(result);
+
+text.replaceAll(regex, "mangoes");
+// 返回: Here are mangoes and mangoes
$str = "Visit Microsoft!";
$regex = "/microsoft/i";
+
// Output: Visit QuickRef!
echo preg_replace($regex, "QuickRef", $str);
@@ -2072,7 +2184,7 @@
:- | - |
---|---|
CANON_EQ | 规范等价 |
CASE_INSENSITIVE | 不区分大小写的匹配 |
COMMENTS | 允许空格和注释 |
DOTALL | 圆点模式 |
MULTILINE | 多行模式 |
UNICODE_CASE | Unicode 感知大小写折叠 |
UNIX_LINES | Unix 行模式 |
函数名称 | 说明 |
---|---|
REGEXP | 字符串是否匹配正则表达式 |
REGEXP_INSTR() | 匹配正则表达式的子字符串的起始索引 (注意:仅限 MySQL 8.0+) |
REGEXP_LIKE() | 字符串是否匹配正则表达式 (注意:仅 MySQL 8.0+) |
REGEXP_REPLACE() | 替换匹配正则表达式的子字符串 (注意:仅限 MySQL 8.0+) |
REGEXP_SUBSTR() | 返回匹配正则表达式的子字符串 (注意:仅 MySQL 8.0+) |
expr REGEXP pat