一、爬虫
Pattern
和Matcher
类是Java中的正则表达式库,用于匹配和处理字符串。通过使用这两个类,你可以从一段文本中提取特定的内容。下面是一个简单的示例,说明如何使用Pattern
和Matcher
类从一段文本中提取所有电子邮件地址:
import java.util.regex.Pattern;
import java.util.regex.Matcher;
public class RegexExample {
public static void main(String[] args) {
String text = "Please send an email to john.doe@example.com or jane.doe@example.org for more information.";
String emailRegex = "\\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\\.[A-Z|a-z]{2,}\\b";
Pattern pattern = Pattern.compile(emailRegex);
Matcher matcher = pattern.matcher(text);
while (matcher.find()) {
String email = matcher.group();
System.out.println("Found email: " + email);
}
}
}
在这个示例中,我们首先定义了一个字符串text
,它包含了两个电子邮件地址。然后我们创建一个电子邮件的正则表达式emailRegex
,用于匹配电子邮件地址。
接下来,我们使用Pattern.compile(emailRegex)
方法创建一个Pattern
对象。然后,我们使用pattern.matcher(text)
方法创建一个Matcher
对象,它将在text
中查找与emailRegex
匹配的子字符串。
最后,我们使用while (matcher.find())
循环遍历所有匹配项,并使用matcher.group()
方法获取匹配到的电子邮件地址。运行此代码将输出以下结果:
Found email: john.doe@example.com
Found email: jane.doe@example.org
你可以根据自己的需求修改正则表达式和文本内容,以便从文本中提取所需的信息。
二、?i、?:、?=、?!
在Java的正则表达式中,(?i)
、(?:)
、(?=)
和(?!)
都是正则表达式的特殊构造,具有特定的功能和含义。以下是它们各自的解释和示例:
-
(?i)
:忽略大小写(?i)
表示在正则表达式的后面部分忽略大小写。示例:String text = "Hello World!"; String regex = "(?i)hello"; System.out.println(text.matches(regex)); // 输出:false
在这个示例中,正则表达式
(?i)hello
将匹配任何大小写组合的"hello"。 -
(?:)
:非捕获组(?:)
表示一个非捕获组,它允许你将正则表达式的一部分分组,但不会将匹配的文本捕获到一个单独的组中。示例:String text = "The car is blue."; String regex = "The (?: