正则表达式
正则表达式学习记录
正则表达式(Regular Expression)是一种用于匹配字符串的特殊文本模式。它由普通字符和特殊字符(称为元字符)组成,可以用来验证、提取或替换文本。
正则表达式的语法
正则表达式是一种用于匹配字符串的工具,它由普通字符和特殊字符(称为元字符)组成,可以用来验证、提取或替换文本。
普通字符
一个普通字符代表它本身。例如,a
表示字母
a
,1
表示数字
1
。除了部分特殊字符外,正则表达式中的大多数字符都是普通字符。
元字符
元字符是具有特殊含义的字符,用于匹配多个字符或一类字符。下面是常见的元字符及其含义:
.(句点)
:匹配任意单个字符,除了换行符\n
。*
:匹配前面的字符零次或多次。例如,a*
可以匹配空字符串、a
、aa
、aaa
等等。+
:匹配前面的字符至少一次。例如,a+
可以匹配a
、aa
、aaa
等等。?
:匹配前面的字符零次或一次。例如,a?
可以匹配空字符串或a
。{n}
:匹配前面的字符恰好出现 n 次。例如,a{3}
可以匹配aaa
。{n,}
:匹配前面的字符至少出现 n 次。例如,a{3,}
可以匹配aaa
、aaaa
、aaaaa
等等。{n,m}
:匹配前面的字符至少出现 n 次,但不超过 m 次。例如,a{2,4}
可以匹配aa
、aaa
、aaaa
。[]
:匹配一类字符。方括号内可以列举出多个字符,表示只要匹配其中的任何一个字符即可。例如,[abc]
可以匹配 字母a
、b
或c
。[^]
:表示不匹配方括号中的任何一个字符。例如,[^abc]
表示匹配除字母a
、b
、c
以外的任何字符。
特殊字符
下面是一些具有特殊含义的字符:
^
:匹配字符串的开头,在方括号内表示取反。例如,^a
表示匹配以字母a
开头的字符串,[^a]
表示匹配不含字母a
的字符串。$
:匹配字符串的结尾。例如,a$
表示匹配以字母a
结尾的字符串。\
:转义字符,用于将特殊字符转换为普通字符。例如,\.
表示匹配句点.
,而不是任意单个字符。
模式修饰符
模式修饰符是可选标志,用于改变匹配模式的行为。常见的模式修饰符包括:
i
:大小写不敏感。例如,/hello/i
可以匹配Hello
、HELLO
或hello
。m
:多行模式。在多行模式下,^
和$
分别匹配一行的开头和结尾,而不是整个字符串的开头和结尾。s
:单行模式。在单行模式下,.
包括换行符\n
在内匹配任意单个字符。g
:全局模式。在全局模式下,会匹配字符串中的所有符合条件的子串,而不只是第一个。x
:忽略空格。在忽略空格模式下,可以在正则表达式中使用空格和换行符,使其更易读。
分组
分组用于将多个元素组合在一起,并为这些元素指定共同的量词或其它操作。
()
:表示分组。例如,(abc)+
可以匹配连续出现的abc
,例如abc
、abcabc
等等。(?:)
:非捕获型分组。与普通分组类似,但不会被记入捕获组,也就是说,不能在后续的正则表达式中引用它。例如,(?:abc)+
可以匹配连续出现的abc
,但无法从匹配结果中提取这些abc
。
常用正则表达式
以下是一些常见的正则表达式及其应用场景:
- 匹配电子邮件地址:
^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$
。这个正则表达式可以匹配大部分常见的电子邮件地址。 - 匹配
URL:
^(http|https)://[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,3}(/\S*)?$
。这个正则表达式可以匹配绝大多数网站的 URL。 - 匹配日期格式:
^\d{4}-\d{1,2}-\d{1,2}$
。这个正则表达式可以匹配 yyyy-MM-dd 格式的日期。 - 匹配手机号码:
^1[3456789]\d{9}$
。这个正则表达式可以匹配中国大陆的手机号码。 - 匹配身份证号码:
^\d{17}(\d|X|x)$
。这个正则表达式可以匹配大陆居民身份证号码。 - 匹配 IP
地址:
\b(?:[0-9]{1,3}\.){3}[0-9]{1,3}\b
。这个正则表达式可以匹配IPv4地址。 - 匹配 HTML
标签:
<([a-z]+)([^<]+)*(?:>(.*)<\/\1>|\s+\/>)
。这个正则表达式可以匹配HTML标签以及其中的内容。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 The Coding Odyssey | Chronicles of a Software Developer!