正则表达式
本文参考:菜鸟教程 正则表达式写的一点点笔记。
以下原文:
[ABC] 匹配 [...] 中的所有字符,例如 [aeiou] 匹配字符串 "google runoob taobao" 中所有的 e o u a 字母。
[^ABC] 匹配除了 [...] 中字符的所有字符,例如 [^aeiou] 匹配字符串 "google runoob taobao" 中除了 e o u a 字母的所有字母。
[A-Z] [A-Z] 表示一个区间,匹配所有大写字母,[a-z] 表示所有小写字母。
. 匹配除换行符(\n、\r)之外的任何单个字符,相等于 [^\n\r]。
[\s\S] 匹配所有。\s 是匹配所有空白符,包括换行,\S 非空白符,不包括换行。
\w 匹配字母、数字、下划线。等价于 [A-Za-z0-9_]
data(\w)?\.dat
,刚开始看到这个东西,可能不知道是什么。
首先,这个东西的用处,执行他的结果,是这样的:
data.dat data1.dat data2.dat datax.dat dataN.dat
我们要知道,正则表达式,就是用来匹配文本的。
那么data(\w)?\.dat 是什么
。
所以实际上它就是 data
拼接上了某些正则表达式再拼接上.dat
,最后执行后找到的就是data.dat data1.dat data2.dat datax.dat dataN.dat
这个。
根据原文:
例如,您很可能使用 ? 和 * 通配符来查找硬盘上的文件。
? 通配符匹配文件名中的 0 个或 1 个字符,而 * 通配符匹配零个或多个字符。
噢,原来如此,?这个问号,还有这种功能。
它可以匹配字符,这个字符的长度不能超过1。
而*则可以匹配任意字符。
这就已经说明了,正则表达式的功能。
我们再看原文:
通过理解 * 通配符的工作原理,引入了正则表达式所依赖的概念,但正则表达式功能更强大,而且更加灵活。
正则表达式的使用,可以通过简单的办法来实现强大的功能。
再看一个例子:
这里面涉及了什么?
涉及了:
[0-9]
、+
、abc
、$
它们分别是什么,有什么用,组合起来又是什么意思?
原文:
^ 为匹配输入字符串的开始位置。
[0-9]+匹配多个数字, [0-9] 匹配单个数字,+ 匹配一个或者多个。
abc$匹配字母 abc 并以 abc 结尾,$ 为匹配输入字符串的结束位置。
啊,所以呢,这个^[0-9]+abc$
的意思就很清楚了。
意为:以数字开头,以abc结尾
再看一个例子:
我们在写用户注册表单时,只允许用户名包含字符、数字、下划线和连接字符 -,并设置用户名的长度,我们就可以使用以下正则表达式来设定。
^[a-z0-9_-]{3,15}$
这个看起来是不是比较复杂。
但我们按之前的例子所给的来看,里面有的元素:
[a-z0-9_-]
,{3,15}
开始符和结尾符不用多赘述。
原文:
以上的正则表达式可以匹配 runoob、runoob1、run-oob、run_oob, 但不匹配 ru,因为它包含的字母太短了,小于 3 个无法匹配。也不匹配 runoob$, 因为它包含特殊字符。
很容易懂,但是有个小疑问,为什么没有+也能匹配多个呢?是因为有这个{3-15}吗?
试了一下,似乎可以,我再试一个。
确实可以,我写了个^[1-3a-c]{0,6}$
,然后123abc
也确实能匹配上。
然后我又有个疑问了,[1-3a-c]
和[a-c1-3]
有区别吗?
至少在这里^[1-3a-c]{0,6}$
是没区别的。
说明^[]$
这种格式里面不需要区分先后。
原文:
正则表达式(regular expression)描述了一种字符串匹配的模式(pattern),可以用来检查一个串是否含有某种子串、将匹配的子串替换或者从某个串中取出符合某个条件的子串等。例如:
runoo+b,可以匹配 runoob、runooob、runoooooob 等,+ 号代表前面的字符必须至少出现一次(1次或多次)。
runoo*b,可以匹配 runob、runoob、runoooooob 等,* 号代表前面的字符可以不出现,也可以出现一次或者多次(0次、或1次、或多次)。
colou?r 可以匹配 color 或者 colour,? 问号代表前面的字符最多只可以出现一次(0次或1次)。
? * +
都是指前面一个字符。