正则表达式入门与实战详解
一、正则表达式简介
正则表达式(Regular Expression,简称Regex)是一种强大的文本处理工具,它由一系列字符和特殊符号组成,用于匹配、查找、替换和提取字符串中的特定模式。正则表达式广泛应用于编程语言、文本编辑器、数据库查询等领域,帮助我们高效地处理各种复杂文本问题。
二、基本元字符与符号
-
.(点号):匹配任意单个字符(除了换行符)。示例:
a.c匹配 "abc"、"adc" 等。 -
*(星号):前一个字符或表达式出现零次或多次。示例:
a*匹配 "", "a", "aa", "aaa" 等。 -
+(加号):前一个字符或表达式至少出现一次。示例:
a+匹配 "a", "aa", "aaa",但不匹配 ""。 -
?(问号):前一个字符或表达式出现零次或一次。示例:
colou?r匹配 "color" 和 "colour"。 -
{n}:前一个字符或表达式精确出现n次。示例:
ab{3}匹配 "abbb"。 -
{n,}:前一个字符或表达式至少出现n次。示例:
ab{2,}匹配 "abb", "abbbb" 等。 -
{n,m}:前一个字符或表达式至少出现n次,最多出现m次。示例:
ab{2,3}匹配 "abb" 和 "abbb"。 -
\d:匹配数字,等同于[0-9]。 -
\w:匹配字母、数字和下划线,等同于[a-zA-Z0-9_]。 -
\s:匹配任何空白字符,包括空格、制表符、换行符等。
三、边界匹配与分组
-
^:匹配输入字符串的开始位置。示例:
^The匹配以 "The" 开始的字符串。 -
$:匹配输入字符串的结束位置。示例:
end$匹配以 "end" 结束的字符串。 -
():括号用于分组,方便组合多个字符一起匹配,并可提取子串。示例:
(\d\d)-(\d\d-\d\d)匹配电话号码格式的字符串,如 "(12)-34-56",并且可以提取区号和号码段。
四、选择与排除
-
|:管道符号用于表示或的关系,匹配左边或右边的表达式。示例:
cat|dog匹配 "cat" 或 "dog"。 -
[^...]:匹配不在中括号内的任何字符。示例:
[^abc]匹配除了 "a"、"b"、"c" 之外的任意字符。
五、预置字符类与反义
-
\D:匹配非数字字符,等同于[^0-9]。 -
\W:匹配非单词字符,等同于[^a-zA-Z0-9_]。 -
\S:匹配非空白字符,与\s相反。
六、量词修饰符
在某些正则引擎中,量词可以加上修饰符使其行为略有不同:
*?、+?、??:懒惰量词,尽可能少地匹配。{n,m}?:匹配{n,m}次,尽量少匹配。
七、实际应用举例
- 验证电子邮件地址:
^\[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$ - 验证手机号码(中国)1:
^(13[0-9]|14[579]|15[0-3,5-9]|16[6]|17[0135678]|18[0-9]|19[89])\d{8}$ - 验证手机号码(中国)2:
^(\(\d{3,4}\)|\d{3,4}-)?\d{7,8}$ - 提取URL链接:
http[s]?://(?:[a-zA-Z]|[0-9]|[$-_@.&+]|[!*\\(\\),]|(?:%[0-9a-fA-F][0-9a-fA-F]))+ - 验证电子邮件地址:
/^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/ - 匹配纯数字:
^\d+$ - *匹配邮政编码(中国):
^[1-9]\d{5}$ - 验证身份证号(中国18位):
^[1-9]\d{5}(18|19|20)?\d{2}(0[1-9]|1[0-2])(0[1-9]|[12][0-9]|3[01])\d{3}[\dXx]$ - 匹配IPv4地址:
^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$ - 提取HTML标签中的链接:
/<a\s+(?:[^>"']|"[^"]*"|'[^']*')*\shref="([^">]+)/gi - 匹配日期格式(YYYY-MM-DD):
^\d{4}-\d{2}-\d{2}$ - 去除字符串两端的空格:
^\s+|\s+$/g - 提取汉字:
/[\u4e00-\u9fa5]+/ - 匹配密码强度(至少包含大小写字母、数字,长度6-20):
^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)[A-Za-z\d]{6,20}$
八、总结
正则表达式虽看似复杂,但掌握其基本原理和常见模式后,将成为文本处理的强大利器。熟练运用正则表达式,能够极大地提高开发效率,简化编程任务。在具体实践中,需结合具体应用场景和正则引擎的特性灵活运用。不断练习和探索,你将逐渐领略到正则表达式的魅力所在。