目录
常见的元字符如下表
Pattern类
Matcher 类
示例
PatternSyntaxException类
示例
在程序开发过程中,我们会对一些字符串做各种限制,比如我们常见的注册邮箱、手机号等操作,一般都会做限制长度、格式等。而这些做限制的操作就是用正则表达式做到的。所谓的正则表达式就是指一个用来描述或者匹配一系列符合某个语法规则的字符串的单个字符串。其实就是一种规则。
正则表达式由普通字符(例如字符a-z)和特殊字符(元字符)组成的文字模式,所谓元字符就是指那些在正则表达式中具有特殊意义的专用字符,可以用来规定其前导字符(即位于元字符前面的字符)在目标对象中的出现模式。
元字符 |
功能描述 |
\ |
转义字符,例如"\n"匹配"\n" |
^ |
正则表达式的开头标志 |
$ |
正则表达式的结尾标志 |
* |
匹配零次或多次 |
+ |
匹配一次或多次 |
? |
匹配一次或零次 |
. |
匹配任意字符 |
{n} |
匹配n次 |
{n,} |
至少匹配n次 |
{n,m} |
n<=m,最少匹配n次,最多匹配m次 |
x|y| |
匹配x或y |
[xyz] |
字符集合。匹配所包含的任意一个字符 |
[a-z] |
匹配小写字母a到z中的任意一个字符。 |
|
匹配大写字母A到Z中的任意一个字符。 |
元字符 |
功能描述 |
[a-zA-Z] |
匹配大小写任意字母中的任意一个字符。 |
[A-z] |
另一种写法,匹配大小写任意字母中的任意一个字符。 |
\d |
数字:[0-9] |
\D |
非数字: [^0-9] |
\s |
空白字符:[ \t\n\x0B\f\r] |
\S |
非空白字符:[^\s] |
\w |
单词字符:[a-zA-Z_0-9] |
\b |
单词边界 |
\B |
非单词边界 |
\A |
输入的开头 |
\G |
上一个匹配的结尾 |
\Z |
输入的结尾,仅用于最后的结束符(如果有的话) |
\z |
输入的结尾 |
\b |
单词边界 |
Java 的正则表达式与 Perl 的语法非常相似。在 Java 中,使用 java.util.regex 包来处理正则表达式,主要涉及三个类:Pattern、Matcher 和 PatternSyntaxException。
Pattern 类是 Java 中用于表示正则表达式的编译表示的类。它提供了一组方法和功能,用于创建、匹配和操作正则表达式。
要使用 Pattern 类,需要先调用其静态方法 compile 来编译一个正则表达式,并将其转化为一个 Pattern 对象。下面是一些常用的方法:
除了以上方法,Pattern 类还提供了很多其他用于正则表达式匹配和替换的方法。
Matcher 类是 Java 中用于对字符串进行正则表达式匹配操作的类。它是 Pattern 类的实例化对象,并提供了一系列方法和功能来执行匹配操作。
要使用 Matcher 类,首先需要创建一个 Matcher 对象。可以通过调用 Pattern 类的 matcher(CharSequence input) 方法来创建 Matcher 对象,将要匹配的字符序列作为参数传入。
下面是 Matcher 类的一些常用方法:
以下一个示例,展示如何使用 Pattern
和 Matcher
类来进行正则表达式匹配和操作:
import java.util.regex.*;
public class myclass {
public static void main(String[] args) {
String input = "请联系我邮箱: [email protected] 或者访问我的网站 https://www.example.com 获取更多信息。";
// 定义正则表达式
String emailPatternString = "\\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,}\\b";
String urlPatternString = "https?://[\\w.-]+\\.[A-Za-z]{2,}";
// 创建 Pattern 对象
Pattern emailPattern = Pattern.compile(emailPatternString);
Pattern urlPattern = Pattern.compile(urlPatternString);
// 创建 Matcher 对象
Matcher emailMatcher = emailPattern.matcher(input);
Matcher urlMatcher = urlPattern.matcher(input);
// 查找并输出第一个匹配的邮箱地址
if (emailMatcher.find()) {
String matchedEmail = emailMatcher.group();
System.out.println("匹配到的邮箱地址: " + matchedEmail);
}
// 判断输入中是否包含 URL
boolean containsUrl = urlMatcher.find();
System.out.println("输入中是否包含 URL: " + containsUrl);
// 循环查找并输出所有匹配的 URL
int count = 0;
while (urlMatcher.find()) {
count++;
String matchedUrl = urlMatcher.group();
System.out.println("匹配到的 URL " + count + ": " + matchedUrl);
}
// 替换邮箱地址和网址
String modifiedInput = emailMatcher.replaceAll("[email protected]");
String modifiedInput1 = urlMatcher.replaceAll("https://www.abc.com");
System.out.println("------------------");
System.out.println("修改后的输入: " + modifiedInput);
System.out.println("修改后的输入: " + modifiedInput1);
}
}
运行结果:
匹配到的邮箱地址: [email protected]
输入中是否包含 URL: true
------------------
修改后的输入: 请联系我邮箱: [email protected] 或者访问我的网站 https://www.example.com 获取更多信息。
修改后的输入: 请联系我邮箱: [email protected] 或者访问我的网站 https://www.abc.com 获取更多信息。
PatternSyntaxException 是 Java 中的一个异常类,用于表示在解析正则表达式时发现的语法错误。
该类是在 java.util.regex 包中定义的,并扩展自 RuntimeException 类。它提供了有关正则表达式语法错误的详细信息,以帮助开发人员调试并修复问题。
PatternSyntaxException 类具有以下几个重要的属性和方法:
当使用 Pattern 类的 compile() 或其他相关方法编译或解析正则表达式时,如果发现语法错误,则会抛出 PatternSyntaxException 异常。
下面是一个示例代码,展示了如何使用 PatternSyntaxException 异常类处理异常情况:
import java.util.regex.*;
public class myclass {
public static void main(String[] args) {
String invalidPattern = "*abc";
try {
Pattern.compile(invalidPattern);//当*abc妀为^abc执行
} catch (PatternSyntaxException e) {
System.out.println("正则表达式语法错误: " + e.getDescription());
System.out.println("错误位置索引: " + e.getIndex());
System.out.println("错误消息: " + e.getMessage());
System.out.println("错误模式: " + e.getPattern());
}
}
}
在上述示例中,我们尝试编译一个包含语法错误的正则表达式 "*abc"。由于存在错误的模式,将抛出 PatternSyntaxException 异常。我们通过捕获异常并打印相关信息来处理这种情况。
正则表达式语法错误: Dangling meta character '*'
错误位置索引: 0
错误消息: Dangling meta character '*' near index 0
*abc
^
错误模式: *abc