正则表达式简明教程

426 阅读2分钟

正则表达式是一种用来匹配和操作文本的强大工具。它由特定字符和符号组成,定义了一种模式,被用于在字符串中进行搜索、匹配、替换和提取等操作。

常见的正则表达式元字符和模式

  1. 字符匹配:

    • 普通字符:仅匹配自身字符。例如,正则表达式 a 匹配字符串中的字母 "a"。
    • 元字符:表示特殊含义的字符,包括 .*+? 等。
    • 字符类:使用方括号 [ ] 来定义一组可能出现的字符。例如,[abc] 表示匹配字符 "a"、"b" 或 "c"。
    • 范围类:在字符类中使用连字符 - 定义一个范围。例如,[0-9] 表示匹配任意数字字符。
    • 反义类:在字符类中使用脱字符 ^ 表示除指定字符以外的任意字符。例如,[^0-9] 表示匹配除数字以外的任意字符。
  2. 重复匹配:

    • *:匹配前一个元素零次或多次。
    • +:匹配前一个元素一次或多次。
    • ?:匹配前一个元素零次或一次。
    • {n}:精确匹配前一个元素出现 n 次。
    • {n,}:匹配前一个元素至少出现 n 次。
  3. 边界限定:

    • ^:匹配字符串的开头。
    • $:匹配字符串的结尾。
    • \b:匹配单词边界。
  4. 分组和捕获:

    • ( ):将多个项组合成一个子表达式,并捕获匹配的结果。
    • (?: ):仅用于分组,不创建捕获。
    • \n:引用第 n 个捕获的子字符串。
  5. 常见的预定义字符类

    • \d:匹配任意数字(0-9)。
    • \w:匹配任意字母、数字或下划线。
    • \s:匹配任意空白字符(空格、制表符等)。
    • \D:匹配任意非数字字符。
    • \W:匹配除字母、数字和下划线以外的任意字符。
    • \S:匹配任意非空白字符。

正则表达式的语法和具体实现可能会因不同的编程语言或工具而有所差异。使用正则表达式可以进行文本搜索和处理,如验证输入格式、提取信息、替换特定字符等。理解和掌握正则表达式的基本知识将使您能够更加高效地操作文本数据。

正则表达式示例

  1. 邮箱验证:

    ^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+.[a-zA-Z]{2,}$
    
    • ^ 表示匹配字符串的开始位置。
    • [a-zA-Z0-9._%+-] 匹配字母、数字、点号、下划线、百分号、加号和减号。
    • + 表示前面的字符可以连续出现一次或多次。
    • @ 匹配字符 "@"。
    • [a-zA-Z0-9.-] 匹配字母、数字、点号和减号。
    • . 表示匹配字符 "."。
    • [a-zA-Z]{2,} 匹配至少两个字母。
    • $ 表示匹配字符串的结束位置。

    这个正则表达式用于验证电子邮箱地址的格式,确保它符合一般的邮箱命名规范和域名规范。

  2. 手机号码验证(简化版):

    ^1\d{10}$
    
    • ^ 表示匹配字符串的开始位置。
    • 1 匹配数字 1。
    • \d{10} 匹配任意10个数字。
    • $ 表示匹配字符串的结束位置。

    这个正则表达式用于验证手机号码的格式,确保手机号码以数字1开头,后面跟着10个数字。

  3. URL验证:

    ^(https?|ftp)://[^\s/$.?#].[^\s]*$
    
    • ^ 表示匹配字符串的开始位置。
    • (https?|ftp) 匹配 "http" 或 "https" 或 "ftp"。
    • :// 匹配字符 "://"。
    • [^\s/$.?#] 匹配除空格、斜杠、问号和井号之外的任意字符。
    • . 匹配字符 "."。
    • [^\s]* 匹配零个或多个非空格字符。
    • $ 表示匹配字符串的结束位置。

    这个正则表达式用于验证网址URL的格式,确保它以 "http://"、"https://" 或 "ftp://" 开头,后面跟着一个或多个非空格字符作为域名。

  4. 身份证号码验证(18位):

    ^(^\d{17}(\d|X|x))$
    
    • ^ 表示匹配字符串的开始位置。
    • \d{17} 匹配任意17个数字。
    • (\d|X|x) 匹配一个数字或者大写字母X或小写字母x。
    • $ 表示匹配字符串的结束位置。

    这个正则表达式用于验证中国大陆身份证号码的格式,确保其由18个数字组成,最后一位数字可以是数字或字母X(校验位)。

  5. 匹配日期(YYYY-MM-DD):

    ^\d{4}-\d{2}-\d{2}$
    
    • ^ 表示匹配字符串的开始位置。
    • \d{4} 匹配任意4个数字。
    • - 匹配字符 "-"。
    • \d{2} 匹配任意2个数字。
    • - 匹配字符 "-"。
    • \d{2} 匹配任意2个数字。
    • $ 表示匹配字符串的结束位置。

    这个正则表达式用于验证日期的格式,确保其符合 "年-月-日" 的形式,其中年份由4个数字表示,月份和日期都由2个数字表示。

  6. 提取HTML标签内的内容:

    <[^>]+>([^<]+)</[^>]+>
    
    • < 匹配字符 "<"。
    • [^>]+ 匹配一个或多个非 ">" 字符。
    • > 匹配字符 ">"。
    • ( 开始一个捕获组,用于提取标签内的内容。
    • [^<]+ 匹配一个或多个非 "<" 字符。
    • ) 结束捕获组。
    • </ 匹配字符 "</"。
    • [^>]+ 匹配一个或多个非 ">" 字符。
    • > 匹配字符 ">"。

    这个正则表达式用于从HTML文本中提取标签内的内容,以捕获组的形式返回标签内部的文本。

  7. 匹配IP地址:

    ^(?:[0-9]{1,3}.){3}[0-9]{1,3}$
    
    • ^ - 表示匹配字符串的起始位置
    • (?:[0-9]{1,3}.) - 匹配 1 到 3 位数字加上一个点号的组合
    • (?:...) 是非捕获组的语法,用于匹配但不捕获该部分的内容
    • {3} - 表示前面的组合需要重复出现 3 次
    • [0-9]{1,3} - 匹配一个由 1 到 3 位数字组成的字符串
    • $ - 表示匹配字符串的结束位置

    整个正则表达式的含义是:以 1 到 3 位数字加上一个点号作为组合出现三次,最后再加上 1 到 3 位数字来匹配一个完整的 IP 地址。