本文已参与「新人创作礼」活动, 一起开启掘金创作之路。
正则表达式
正则表达式,又称正规表示式、正规表示法、正规表达式、规则表达式、常规表示法(英语:Regular Expression,在代码中常简写为 regex、regexp 或 RE),计算机科学的一个概念。正则表达式使用单个字符串来描述、匹配一系列符合某个句法规则的字符串。在很多文本编辑器里,正则表达式通常被用来检索、替换那些符合某个模式的文本。
许多程序设计语言都支持利用正则表达式进行字符串操作。例如,在 Perl 中就内建了一个功能强大的正则表达式引擎。正则表达式这个概念最初是由 UNIX 中的工具软件(例如
sed和grep)普及开的。正则表达式通常缩写成“regex”,单数有 regexp、regex,复数有 regexps、regexes、regexen。
简单的说形式和功能上正则表达式和我们前面讲的通配符很像,不过它们之间又有很大差别,特别在于一些特殊的匹配字符的含义上,希望初学者注意不要将两者弄混淆。
假设我们有这样一个文本文件,包含 nutprince 和 nutprincess 这两个字符串,同样一个表达式:
nut*
如果这作为一个正则表达式,它将只能匹配 shi,而如果不是作为正则表达式 * 作为一个通配符,则将同时匹配这两个字符串。这是为什么呢?因为在正则表达式中 * 表示匹配前面的子表达式(这里就是它前面一个字符)零次或多次。
一个正则表达式通常被称为一个模式(pattern),为用来描述或者匹配一系列符合某个句法规则的字符串。
选择
| 竖直分隔符表示选择,例如 boy|girl 可以匹配 boy 或者 girl。
数量限定
数量限定除了我们举例用的 * 还有 + 加号 ? 问号,如果在一个模式中不加数量限定符则表示出现一次且仅出现一次:
+表示前面的字符必须出现至少一次(1 次或多次),例如goo+gle可以匹配gooogle,goooogle等;?表示前面的字符最多出现一次(0 次或 1 次),例如,colou?r,可以匹配color或者colour;*星号代表前面的字符可以不出现,也可以出现一次或者多次(0 次、或 1 次、或多次),例如,0*42可以匹配 42、042、0042、00042 等。