【计算机基础】正则表达式 Regular Exprssion (RE/regex)
正则表达式
又称 规则表达式,Regular Expression,常简写为regex、regexp或RE;
正则表达式是计算机科学的一个概念。
正则表达式通常被用来检索、替换那些符合某个模式(规则)的文本。(用来匹配字符串/文字)
- “正则"就是"规则”,"正则表达式"就是能够让我们表达出自己想法的规则,只要学会了这种规则,我们就能够表达自己的想法。
白话:
大家都知,command+F
可以在文本内容内搜索对应的文本;
若文本"hello"出现了三次,分别在第一行,第二行和最后一行,搜索结果被匹配了3此,搜索目的达到。
但,如果我想搜索“位于首行的文本”,不想获取到其他行的文本;也就是说,字符串不仅要是"hello",而且还要位于行首,需要同时满足这两个条件的字符串才算满足条件。如何处理?
Regular Expression可以帮助告诉计算机,只查找"位于行首的hello字符串"
————————————————————————
例如Sublime Text中有此功能的实现:
注:.*
就是Regular Expression的功能钮;通过搜索正则表达式^hello
匹配到了首行的hello
。
举几个日常见到的例子:
淘宝网注册账号,输入手机时,输入数字不满11位时,会有提示框出现“手机号码格式不正确,请重输”;
这就是系统运用正则表达式,来发现错误的典型例子。
发微博时:文本框添加表情,出现的是文本(如[难过]
),发送后却成为了GIF图片;这也是正则运用后的结果。
正则是所有编程语言都会用到的工具,语法都大同小异。及其重要。
————————————————————————
匹配任意字符: / 字符 / g
注:以下练习用✔︎
表示此行被Expression匹配到了;
建议使用在线练习网站:RegExr.com
/字
/g
匹配字符
/字 ..
/g
点代表匹配(除了断行/空行外)任意一个字符;
(亦可写成:/ 字符 ... /g
/ .. 字符 /g
,一个点代表一个字符)
————————————————————————————————
Expression:
/ 菠萝 .. /g
————————————————————————————————
Text:
菠萝油 ✔︎
菠萝果茶 ✔︎
菠什么萝
————————————————————————————————
————————————————————————————————
Expression:
/ . /g
————————————————————————————————
Text:
菠萝油 ✔︎
菠萝果茶 ✔︎
菠什么萝 ✔︎
————————————————————————————————
————————————————————————————————
Expression:
/ . /g
————————————————————————————————
Text:
若这里全为断行
NO MATCH
————————————————————————————————
————————————————————————————————
Expression:
/ .... /g
————————————————————————————————
Text:
abc 因Expression是4个点,Test内只有3个字符
NO MATCH
————————————————————————————————
————————————————————————————————
Expression:
/ 3.14 /g
————————————————————————————————
Text:
3.14 ✔︎
2.18
4.14
3-14 ✔︎ 因为“点”代表任意字符,也包括“-”
————————————————————————————————
若我们不想让“点”代表任何字符,想明确匹配“点”?
“点”前加 斜杠(转义符):\.
(注意:是delete键下方的斜杠键);
————————————————————————————————
Expression:
/ 3\.14 /g
————————————————————————————————
Text:
3.14 ✔︎
2.18
4.14
3-14 此行不再被匹配
————————————————————————————————
/\w
/g (小写 w)
匹配阿拉伯数字、英文大小写还有下划线(数字和字母以外只支持下划线);
————————————————————————————————
Expression:
/ \w /g
————————————————————————————————
Text:
1234567890 ✔︎
abcdefg ✔︎
hijklmnopqrst ✔︎
_ ✔︎
「」#¥*!@()
————————————————————————————————
/\W
/g (大写 w)
匹配被小写w排除在外的字符(\w
的补集);
————————————————————————————————
Expression:
/ \w /g
————————————————————————————————
Text:
1234567890
abcdefg
hijklmnopqrst
_
「」#¥*!@() ✔︎
————————————————————————————————
/\d
/g (小写 d)
匹配阿拉伯数字;
————————————————————————————————
Expression:
/ \d /g
————————————————————————————————
Text:
1.2345.67890 ✔︎(其中两个“点”未被匹配)
abcdefg
hijklmnopqrst
_
「」#¥*!@()
————————————————————————————————
————————————————————————————————
Expression:
/ \d\.\d /g
————————————————————————————————
Text:
1.2 ✔︎
————————————————————————————————
/\D
/g (大写d)
匹配非阿拉伯数字的字符,包括空格(\d
的补集);
————————————————————————————————
Expression:
/ \D /g
————————————————————————————————
Text:
1.2345.67890 ✔︎(只匹配到两个“点”)
ab cd efg ✔︎
hijklmnopqrst ✔︎
_ ✔︎
————————————————————————————————
/\s
/g (小写 s)
匹配所有空白字符:空格、tab、断行等;
————————————————————————————————
Expression:
/ \s /g
————————————————————————————————
Text:
1 234 67890 ✔︎(只匹配到其中的空格和tab)
abcdefg
hijklmnopqrst
_
「」#¥*!@()
————————————————————————————————
/\S
/g (大写 S)
匹配所有空白字符(空格、tab、断行等)以外的字符;
下面课程是字符合集