正则表达式

打印 上一主题 下一主题

主题 859|帖子 859|积分 2577

正则表达式(Regular Expression, regex) 是一种用于匹配字符串的强大工具,广泛应用于文本查找、替换和验证操纵中。它通过特定的模式来形貌要匹配的文本。
1. 正则表达式的根本组成部分

字符类


  • [abc]:匹配 a、b 或 c 中的任意一个字符。
  • [^abc]:匹配除 a、b、c 之外的任何字符(取反)。
  • [a-z]:匹配所有小写字母。
  • [A-Z]:匹配所有大写字母。
  • [0-9]:匹配所有数字。
  • .(点号):匹配除换行符以外的任意单个字符。
元字符


  • \d:匹配任意数字,等价于 [0-9]。
  • \D:匹配非数字字符,等价于 [^0-9]。
  • \w:匹配字母、数字、下划线,等价于 [a-zA-Z0-9_]。
  • \W:匹配非字母、数字、下划线,等价于 [^a-zA-Z0-9_]。
  • \s:匹配任何空白字符(包括空格、制表符、换行符)。
  • \S:匹配任何非空白字符。
量词(指定匹配次数)


  • *:匹配前面的字符 0 次或多次,例如 a* 匹配 0 个或多个 a。
  • +:匹配前面的字符 1 次或多次,例如 a+ 匹配 1 个或多个 a。
  • ?:匹配前面的字符 0 次或 1 次,例如 a? 匹配 0 个或 1 个 a。
  • {n}:匹配前面的字符恰恰 n 次,例如 a{3} 匹配 3 个 a。
  • {n,}:匹配前面的字符至少 n 次,例如 a{2,} 匹配 2 个或更多 a。
  • {n,m}:匹配前面的字符至少 n 次,至多 m 次,例如 a{2,4} 匹配 2 到 4 个 a。
边界匹配符


  • ^:匹配字符串的开头。例如,^a 匹配以 a 开头的字符串。
  • $:匹配字符串的末端。例如,a$ 匹配以 a 末端的字符串。
  • \b:匹配单词边界。例如,\bword\b 只匹配独立的 word。
  • \B:匹配非单词边界。例如,\Bword\B 匹配不在边界上的 word。
分组与引用


  • (abc):将 abc 作为一个组。例如 (abc)+ 匹配一个或多个 abc。
  • \1、\2 等:引用前面括号中的匹配结果。例如,(a)(b)\1\2 匹配 abab。
或运算


  • a|b:匹配 a 或 b。例如,apple|orange 匹配 apple 或 orange。
2. 常用正则表达式示例

匹配一个有效的电子邮件地址
  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 个或更多的字母。
匹配电话号码(如:123-456-7890)
  1. ^\d{3}-\d{3}-\d{4}$
复制代码

  • \d{3}:匹配三个数字。
  • -:匹配连字符。
  • \d{4}:匹配四个数字。
匹配 IP 地址
  1. ^([0-9]{1,3}\.){3}[0-9]{1,3}$
复制代码

  • ([0-9]{1,3}\.){3}:匹配三段 1 到 3 个数字,后面跟一个点。
  • [0-9]{1,3}:匹配末了一段 1 到 3 个数字。
匹配 URL
  1. ^(https?|ftp)://[^\s/$.?#].[^\s]*$
复制代码

  • https?|ftp:匹配 http、https 或 ftp。
  • [^\s/$.?#]:匹配非空白字符或 /、.、$、?、# 等。
  • [^\s]*$:匹配路径部分,直到结束。
3. Java 中的正则表达式利用

在 Java 中,正则表达式常用于 String 类的 replaceAll()、matches()、split() 方法,或 Pattern 和 Matcher 类。
例1:利用 replaceAll 去除非字母字符
  1. String text = "Hello, World!";
  2. String result = text.replaceAll("[^a-zA-Z]", "");
  3. System.out.println(result);  // 输出:HelloWorld
复制代码
例2:验证电子邮件地址
  1. String email = "example@test.com";
  2. boolean isValid = email.matches("^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$");
  3. System.out.println(isValid);  // 输出:true
复制代码
例3:利用 split() 分割字符串
  1. String sentence = "This is a test.";
  2. String[] words = sentence.split("\\s+");  // 按空格分割
  3. for (String word : words) {
  4.     System.out.println(word);
  5. }
复制代码
总结:

正则表达式是一个强大的文本处理工具,能够根据模式灵活匹配字符串。通过理解字符类、元字符、量词、分组和边界等,可以处理各种复杂的字符串匹配需求。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

半亩花草

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表