正则表达式(Regular Expression)
1. 定义与用途
正则表达式是一种描述字符串匹配模式的工具,它可以用来检查一个字符串是否含有某种子串、将匹配的子串做替换或者从某个字符串中取出符合某个条件的子串等。正则表达式由普通字符(如a到z)和特殊字符(称为“元字符”)组成,用于定义搜索文本时要匹配的一个或多个字符串的模式。
2. 基本语法与规则
2.1 字符类
- 备选字符集:用
[]
表示,匹配方括号中的任意字符。例如,[abc]
匹配"a"、"b"或"c"。连续字符可以用-
表示范围,如[0-9]
匹配任意单个数字。 - 预定义字符集:提供常用的字符集简化写法,如
\d
匹配任意单个数字,\s
匹配任何空白字符。
2.2 数量词
- 确定数量:如
{n}
表示恰好出现n次,{n,m}
表示至少出现n次,最多出现m次。 - 不确定数量:
*
表示零次或多次,+
表示一次或多次,?
表示零次或一次。
2.3 边界匹配
^
匹配字符串的开头,$
匹配字符串的结尾。
2.4 分组与捕获
- 使用
()
进行分组,可以将匹配的内容分组并进行后续操作。
2.5 特殊字符
- 正则表达式中的特殊字符包括
.
、*
、+
、?
、^
、$
、{}
、[]
、|
、\
等。若要匹配这些特殊字符本身,需要使用反斜杠\
进行转义。
3. 使用场景
- 验证:检查整个字符串是否符合特定模式,如密码强度验证。
- 查找:在文本中查找符合特定模式的子串,如从日志文件中提取日期信息。
举例
正则表达式是一种强大的文本处理工具,用于定义字符串的搜索模式。以下是几个常用的正则表达式例子,它们涵盖了不同的使用场景和语法特点:
1. 匹配数字
- 匹配所有的正数:
^[0-9]+$
- 解释:
^
表示字符串开始,[0-9]+
表示匹配一个或多个数字,$
表示字符串结束。
- 解释:
- 匹配所有的小数:
^\-?[0-9]*\.?[0-9]*$
- 解释:
^\-?
表示可选的负号,[0-9]*
表示匹配零个或多个数字,\.?
表示可选的小数点,再后面跟零个或多个数字。
- 解释:
- 匹配所有的整数:
^\-?[0-9]+$
- 解释:与匹配小数类似,但去掉了小数点及其后面的数字部分。
- 只能输入n位的数字:
^\d{n}$
- 解释:
\d
等价于[0-9]
,{n}
表示恰好n位。
- 解释:
2. 匹配特定格式的字符串
- 提取信息中的电子邮件地址:
\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*
- 解释:匹配常见的电子邮件地址格式。
- 提取信息中的中国手机号码:
(86)*0*13\d{9}
- 解释:匹配以13开头的11位手机号码,可选的86和0前缀。
- 提取信息中的中国身份证号码:
\d{18}|\d{15}
- 解释:匹配15位或18位的身份证号码。
3. 匹配特定类型的字符
- 匹配中文字符:
[\u4e00-\u9fa5]
- 解释:匹配Unicode编码范围在4E00到9FA5之间的中文字符。
- 匹配英文字母和数字及下划线组成的字符串:
^\w+$
- 解释:
\w
等价于[A-Za-z0-9_]
,表示匹配英文字母、数字或下划线。
- 解释:
- 只能输入由26个小写英文字母组成的字符串:
^[a-z]+$
- 解释:匹配由小写英文字母组成的字符串。
4. 验证和过滤
- 验证用户密码:
^[a-zA-Z]\w{5,17}$
- 解释:密码以字母开头,长度在6到18之间,包含字符、数字和下划线。
- 验证Internet URL:
^http://([\w-]+\.)+[\w-]+(/[\w-./?%&=]*)?$
- 解释:匹配以http://开头的URL地址。
- 验证电话号码(以国内固定电话为例):
(\(\d{3,4}\)|\d{3,4}-|\s)?\d{8}
- 解释:可选的区号(带括号、连字符或空格分隔),后跟8位电话号码。
5. 特殊需求
- 匹配首尾空白字符:
^\s*|\s*$
- 解释:匹配字符串开头或结尾的空白字符(包括空格、制表符等)。
- 匹配HTML标记:
<(.*?)>.*?<\/\1>
或<(.*?) \/>
- 解释:匹配简单的HTML标签,但请注意,对于复杂的嵌套标记可能无法完全匹配。
这些例子展示了正则表达式的多样性和强大功能,它们可以根据需要进行组合和修改,以满足各种复杂的文本处理需求。