【计算机基础】正则表达式 Regular Exprssion (RE/regex)

正则表达式

又称 规则表达式Regular Expression,常简写为regex、regexp或RE
正则表达式是计算机科学的一个概念。
正则表达式通常被用来检索、替换那些符合某个模式(规则)的文本。(用来匹配字符串/文字)

  • “正则"就是"规则”,"正则表达式"就是能够让我们表达出自己想法的规则,只要学会了这种规则,我们就能够表达自己的想法。

白话:
大家都知,command+F可以在文本内容内搜索对应的文本;
若文本"hello"出现了三次,分别在第一行,第二行和最后一行,搜索结果被匹配了3此,搜索目的达到。
但,如果我想搜索“位于首行的文本”,不想获取到其他行的文本;也就是说,字符串不仅要是"hello",而且还要位于行首,需要同时满足这两个条件的字符串才算满足条件。如何处理?
Regular Expression可以帮助告诉计算机,只查找"位于行首的hello字符串"
————————————————————————
例如Sublime Text中有此功能的实现:
注:.*就是Regular Expression的功能钮;通过搜索正则表达式^hello匹配到了首行的hello
【计算机基础】正则表达式 Regular Exprssion (RE/regex)

举几个日常见到的例子:
淘宝网注册账号,输入手机时,输入数字不满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、断行等)以外的字符;

下面课程是字符合集