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}正好 3a
a{3,}3个或更多的a
a{3,6}a36 之间
a*贪心量词
a*?惰性量词
a*+占有量词

常用元字符

-
    +
    • ^
    • {
    • +
    • @@ -158,7 +158,7 @@
    • \
    • ?
    - +

    使用 \ 转义这些特殊字符

元序列

@@ -528,7 +528,7 @@
:--
(?(1)yes|no)条件语句
(?(R)yes|no)条件语句
(?(R#)yes|no)递归条件语句
(?(R&name)yes|no)条件语句
(?(?=...)yes|no)有条件的前瞻
(?(?<=...)yes|no)有条件的往后看
-

零宽度断言

+

递归

@@ -562,16 +562,7 @@ - - - - - - - - -
:--
(?=...)正先行断言
(?!...)负先行断言
(?<=...)正后发断言
(?<!...)负后发断言
?= 正先行断言-存在
?! 负先行断言-排除
?<=正后发断言-存在
?<!负后发断言-排除
-

零宽度断言 允许您在主模式之前(向后看)或之后(lookahead)匹配一个组,而不会将其包含在结果中。

+
:--
(?R)递归整个模式
(?1)递归第一个子模式
(?+1)递归第一个相对子模式
(?&name)递归子模式name
(?P=name)匹配子模式name
(?P>name)递归子模式name

标志/修饰符

@@ -622,8 +613,12 @@ -
:--
g全球的
m多行
i不区分大小写
x忽略空格
s单线
u统一码
X扩展
U不贪心
A
J重复的组名
-

递归

+ + + + +
:--
g全部
m多行
i不区分大小写
x忽略空格
s单线
u统一码
X扩展
U不贪心
A
J重复的组名
d结果包含捕获组子字符串开始和结束的索引
+

零宽度断言

@@ -657,7 +652,16 @@ -
:--
(?R)递归整个模式
(?1)递归第一个子模式
(?+1)递归第一个相对子模式
(?&name)递归子模式name
(?P=name)匹配子模式name
(?P>name)递归子模式name
+ + + + + + + + +
:--
(?=...)正先行断言
(?!...)负先行断言
(?<=...)正后发断言
(?<!...)负后发断言
?= 正先行断言-存在
?! 负先行断言-排除
?<=正后发断言-存在
?<!负后发断言-排除
+

零宽度断言 允许您在主模式之前(向后看)或之后(lookahead)匹配一个组,而不会将其包含在结果中。

POSIX 字符类

@@ -896,62 +900,6 @@
范例说明
ring 匹配 ring springboard 等。
. 匹配 a9+ 等。
h.o 匹配 hooh2oh/o 等。
ring\? 匹配 ring?
\(quiet\) 匹配(安静)
c:\\windows 匹配 c:\windows

使用 \ 搜索这些特殊字符:
[ \ ^ $ . | ? * + ( ) { }

-

备择方案

- - - - - - - - - - - - - - - - - - - - - -
范例说明
cat|dog 匹配 catdog
id|identity 匹配 ididentity
identity|id 匹配 ididentity
-

当替代品重叠时,命令从长到短

-

字符类

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
范例说明
[aeiou]匹配任何元音
[^aeiou]匹配一个非元音
r[iau]ng匹配ring、wrangle、sprung等。
gr[ae]y匹配 graygrey
[a-zA-Z0-9]匹配任何字母或数字
-

[ ] 中总是转义 . \ ] 有时是 ^ - .

速记类

@@ -1018,6 +966,62 @@
范例说明
colou?r匹配 colorcolor
[BW]ill[ieamy's]*匹配 BillWillyWilliam's 等。
[a-zA-Z]+匹配 1 个或多个字母
\d{3}-\d{2}-\d{4}匹配 SSN
[a-z]\w{1,7}匹配 UW NetID
+

备择方案

+ + + + + + + + + + + + + + + + + + + + + +
范例说明
cat|dog 匹配 catdog
id|identity 匹配 ididentity
identity|id 匹配 ididentity
+

当替代品重叠时,命令从长到短

+

字符类

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
范例说明
[aeiou]匹配任何元音
[^aeiou]匹配一个非元音
r[iau]ng匹配ring、wrangle、sprung等。
gr[ae]y匹配 graygrey
[a-zA-Z0-9]匹配任何字母或数字
+

[ ] 中总是转义 . \ ] 有时是 ^ - .

贪婪与懒惰

@@ -1195,7 +1199,7 @@ -
范例说明
on(?:click|load)快于:
on(click|load)
+
范例说明
on(?:click|load)快于:on(click|load)

尽可能使用非捕获或原子组

原子组

@@ -1482,8 +1486,10 @@
表达式匹配示例
(f|c|m)at\.?The fat cat sat on the mat.

如果想要匹配句子中的 . 则要写成 \. 以下这个例子 \.? 是选择性匹配.

-

锚点

-

^

+

锚点

+ +

匹配指定开头或结尾的字符串就要使用到锚点。

+

^ 号 (符串的开头)

@@ -1503,7 +1509,7 @@
表达式匹配示例
(T|t)heThe car is parked in the garage.
^(T|t)heThe car is parked in the garage.
-

$

+

$ 号 (否是最后一个)

@@ -1521,10 +1527,10 @@ -
表达式匹配示例
(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.
-

简写字符集

- +

简写字符集

+ @@ -1586,7 +1592,7 @@ -
简写描述
.除换行符外的所有字符
\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 行终止符

正则表达式提供一些常用的字符集简写。

?=... 正先行断言

@@ -1866,35 +1872,127 @@
:---
re.Ire.IGNORECASE忽略大小写
re.Mre.MULTILINE多行
re.Lre.LOCALE使 \w\b\s locale 依赖
re.Sre.DOTALL点匹配所有 (包括换行符)
re.Ure.UNICODE使 \w\b\d\s unicode 依赖
re.Xre.VERBOSE可读风格

JavaScript 中的正则表达式

-

test()

+

RegExp

+ +

属性

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
:-:-
dotAll是否使用了 s 修饰符
flags返回标志的字符串
global是否使用了 g (全部)修饰符
hasIndices是否使用了 d 修饰符
ignoreCase匹配文本的时候是否忽略大小写 i
multiline是否进行多行搜索 m
lastIndex该索引表示从哪里开始下一个匹配
source正则表达式的文本
sticky搜索是否是 sticky
unicodeUnicode 功能是否开启
+

方法

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
:-:-
match()获取匹配结果
matchAll()所有匹配项
replace()替换所有符合正则模式的匹配项
search()搜索以取得匹配正则模式的项
split()切割字符串返回字符串数组
compile()(重新)编译正则表达式
exec()指定字符串中执行一个搜索匹配
test()正则表达式与指定的字符串是否匹配
toString()返回该正则表达式的字符串
+

test()

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
 

exec()

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'
+

replaceAll()

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
 

PHP中的正则表达式

@@ -1978,6 +2089,7 @@

preg_replace

$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_CASEUnicode 感知大小写折叠
UNIX_LINESUnix 行模式
-

方法

+

方法

Pattern

  • 模式编译 compile(字符串正则表达式 [,int flags])
  • @@ -2150,7 +2262,7 @@
    函数名称说明
    REGEXP 字符串是否匹配正则表达式
    REGEXP_INSTR() 匹配正则表达式的子字符串的起始索引
    (注意:仅限 MySQL 8.0+)
    REGEXP_LIKE() 字符串是否匹配正则表达式
    (注意:仅 MySQL 8.0+)
    REGEXP_REPLACE()替换匹配正则表达式的子字符串
    (注意:仅限 MySQL 8.0+)
    REGEXP_SUBSTR() 返回匹配正则表达式的子字符串
    (注意:仅 MySQL 8.0+)
    -

REGEXP

+

REGEXP

expr REGEXP pat 
 

Examples