正则表达式(Regular Expression, 缩写常用regex, regexp表示)是计算机科学中的一个概念,很多高级语言都支持正则表达式。
目录
何为正则表达式
语法规则
普通字符
字符转义
何为正则表达式
正则表达式是根据一定规则构建而出的规则,用于匹配字符串中子串或字符组合的模式。正则表达式可以通过符号+字符的形式来表示,完成对一系列符合某个语法规则的字符串的匹配。很多应用中也有对正则表达式的应用,例如Visual Studio中的查找替换功能、谷歌百度搜索引擎中的搜索字段等。
在开发当中,正则表达式也扮演着十分重要的角色。比如我们在做了一个文本输入框,需要判断文本输入框中是否为邮箱格式,那么此时就可以通过正则表达式来实现判定匹配(可以用繁长的if else这类语句实现,但这也偏离了正则表达式的设计初衷了~)
OK,接下来让我们来看看Golang中正则表达式的语法
语法规则
普通字符
普通字符是正则表达式的基本组成之一,是正则表达式的“基石”。普通字符包括有“可打印字符”、“不可打印字符”,其中“可打印字符”中又包含了大写字母、小写字母、数字、标点符号和其他一些符号。
这里设计一个场景,假设我们需要判断一个字符变量是否是数字,若不考虑使用正则表达式,那么要实现这个判断,我们需要使用下列代码
switch num {
case 1 :
case 2 :
case 3 :
.
.
.
case 0 :
}
又或者借助多个if else语句(在这里不一一列举了)。如果用这种方式,开发效率将会大打折扣。
此时,我们便可以尝试使用正则表达式了~
[0123456789]
方括号“[]”表示的是一个“字符组”,代表一位字符。方括号中的数字“0123456789”表示只要待匹配的字符串与其中任何一个字符相同,那么程序就会认为匹配成功,反之匹配失败。
如果想表达的数字(ASCII码)是连续的,那么也可以用元字符“-”来对表达式进行简化,见下方:
[0-9]
拓展:
ASCII码表
依次类推,当我们想判断一个长度为1的字符串是否是英文小写字母,可以写成:
[a-z]
那像表示由大写字母“A”到小写字母"z"呢?这里要注意,我们不能写成 [A-z],观察拓展中的ASCII表,其中在字母“A”和字母"a"之间存在其他字符。
那么正确的表达方式应是
[a-zA-Z]
如果要判断长度为2的字符串中是否含有小写字母呢?
[a-z][a-z]
当允许的字符范围只有一个时可以省略“[]”。比如,判断输入的是“Hello”还是"hello":
[Hh]ello
字符转义
在正则表达式中,有时我们需要使用符号本身的意义,例如之前所用到的字符‘-’,如果在没进行转义的情况下,它是一个元字符,是一个“功能性”的符号;当我们确实需要表达‘-’这个符号的本义时,就需要使用反斜杠‘\’了。例如若要匹配‘[’符号,则可以表示为:
[\[]
如果想匹配“a” “-” “z” 这三个字符,那么便可以用下列表达式:
[0\-9]
拓展:
元字符除了 ‘-’ 之外,还有其他的,见下表:
更新中……