JAVA语言-Pattern 正则的基本使用(常用正则表达式\Java Matcher对象中find()与matches()的区别)

7 篇文章 0 订阅

Java 正则表达式

正则表达式定义了字符串的模式。

正则表达式可以用来搜索、编辑或处理文本。

正则表达式并不仅限于某一种语言,但是在每种语言中有细微的差别。

一个字符串其实就是一个简单的正则表达式,例如 Hello World 正则表达式匹配 “Hello World” 字符串。
.(点号)也是一个正则表达式,它匹配任何一个字符如:“a” 或 “1”。

Java 正则表达式和 Perl 的是最为相似的。

java.util.regex 包主要包括以下三个类:

  • Pattern 类:
    pattern 对象是一个正则表达式的编译表示。Pattern 类没有公共构造方法。要创建一个 Pattern 对象,你必须首先调用其公共静态编译方法,它返回一个 Pattern 对象。该方法接受一个正则表达式作为它的第一个参数。

  • Matcher 类:
    Matcher 对象是对输入字符串进行解释和匹配操作的引擎。与Pattern 类一样,Matcher 也没有公共构造方法。你需要调用 Pattern 对象的 matcher 方法来获得一个 Matcher 对象。

常用正则表达式

[abc] a、b 或 c(简单类)

[^abc] 任何字符,除了 a、b 或 c(否定)

[a-zA-Z] a到 z 或 A 到 Z,两头的字母包括在内(范围)

[a-d[m-p]] a到 d 或 m 到 p:[a-dm-p](并集)

[a-z&&[def]] d、e 或 f(交集)

[a-z&&[^bc]] a 到 z,除了 b 和 c:[ad-z](减去)

[a-z&&[^m-p]] a 到 z,而非 m 到 p:[a-lq-z](减去)

. 任何字符(与行结束符可能匹配也可能不匹配)

\d 数字:[0-9]

\D 非数字: [^0-9]

\s 空白字符:[\t\n\x0B\f\r]

\S 非空白字符:[^\s]

\w 单词字符:[a-zA-Z_0-9]

\W 非单词字符:[^\w]

\p{Lower} 小写字母字符:[a-z]

\p{Upper} 大写字母字符:[A-Z]

X? X,一次或一次也没有

X* X,零次或多次

X+ X,一次或多次

X{n} X,恰好 n 次

X{n,} X,至少 n 次

X{n,m} X,至少 n 次,但是不超过 m 次

(X) X,作为捕获组

非捕获

(?=X) X,通过零宽度的正lookahead

(?!X) X,通过零宽度的负lookahead

(?<=X) X,通过零宽度的正lookbehind

(?<!X) X,通过零宽度的负lookbehind

(?>X) X,作为独立的非捕获组

java Pattern和Matcher 常用使用示例

浅谈Java Matcher对象中find()与matches()的区别
参考URL: https://zhuanlan.zhihu.com/p/142846161

java正则表达式通过java.util.regex包下的Pattern类与Matcher类实现。

Pattern类用于创建一个正则表达式,也可以说创建一个匹配模式,它的构造方法是私有的,不可以直接创建,但可以通过Pattern.complie(String regex)简单工厂方法创建一个正则表达式,

Pattern p=Pattern.compile("\\w+"); 
p.pattern();//返回 \w+ 

pattern() 返回正则表达式的字符串形式,其实就是返回Pattern.complile(String regex)的regex参数

Pattern.matches("\\d+","2223");//返回true 
Pattern.matches("\\d+","2223aa");//返回false,需要匹配到所有字符串才能返回true,这里aa不能匹配到 
Pattern.matches("\\d+","22bb23");//返回false,需要匹配到所有字符串才能返回true,这里bb不能匹配到 

Pattern类用于创建一个正则表达式,也可以说创建一个匹配模式,它的构造方法是私有的,不可以直接创建,但可以通过Pattern.complie(String regex)简单工厂方法创建一个正则表达式。

Pattern.matcher(CharSequence input)返回一个Matcher对象.
Matcher类的构造方法也是私有的,不能随意创建,只能通过Pattern.matcher(CharSequence input)方法得到该类的实例。

Pattern p=Pattern.compile("\d+");
Matcher m=p.matcher("22bb23");

m.pattern();//返回p 也就是返回该Matcher对象是由哪个Pattern对象的创建的。

Matcher 实例有一些常用方法。

 Pattern p1 = Pattern.compile("[A-Z]");
 p1.matcher(str).find()

find():是否存在与该模式匹配的下一个子序列。简单来说就是在字符某部分匹配上模式就会返回true,同时匹配位置会记录到当前位置,再次调用时从该处匹配下一个。

matches():整个字符串是否匹配上模式,匹配上则返回true,否则false。

@Test
public void patternTest() {
	String str = "hellohellohello";
	String regex = "hello";
	Pattern pattern = Pattern.compile(regex);
	Matcher matcher = pattern.matcher(str);
	System.out.println(matcher.find());
	System.out.println(matcher.matches());
}

输出结果为:
find() -> true
matches() -> false

Matcher中的start()和end()。start(),点进方法可以看到返回的是上一个匹配项的起始索引,如果没有匹配项将抛出IllegalStateException异常。同理,end()则为结束的索引。

@Test
public void patternTest() {
    String str = "hellohellohello";
    String regex = "hello";
    Pattern pattern = Pattern.compile(regex);
    Matcher matcher = pattern.matcher(str);
    while (matcher.find()) {
      System.out.println(matcher.start() + "->" + matcher.end());
    }
}
输出:
0->5
5->10
10->15
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java MatcherJava的一个类,用于对字符串进行匹配操作。它是通过正则表达式来实现字符串匹配的功能。Matcher类提供了一系列方法,可以用于查找、匹配和替换字符串。 Matcher类的常用方法包括: 1. `matches()`:尝试将整个输入序列与模式进行匹配。 2. `find()`:在输入序列查找下一个匹配项。 3. `group()`:返回与上一次匹配操作相匹配的输入子序列。 4. `start()`:返回上一次匹配操作的起始索引。 5. `end()`:返回上一次匹配操作的结束索引。 使用Matcher类需要先创建一个Pattern对象,通过Pattern对象的`matcher()`方法来创建一个Matcher对象。然后可以使用Matcher对象的方法进行字符串匹配操作。 下面是一个示例代码,演示了如何使用Matcher类进行字符串匹配: ```java import java.util.regex.Matcher; import java.util.regex.Pattern; public class MatcherExample { public static void main(String[] args) { String input = "Hello, World! This is a test string."; String pattern = "\\b\\w+\\b"; // 匹配单词 Pattern p = Pattern.compile(pattern); Matcher m = p.matcher(input); while (m.find()) { System.out.println("Match: " + m.group()); System.out.println("Start index: " + m.start()); System.out.println("End index: " + m.end()); } } } ``` 输出结果: ``` Match: Hello Start index: 0 End index: 5 Match: World Start index: 7 End index: 12 Match: This Start index: 15 End index: 19 Match: is Start index: 20 End index: 22 Match: a Start index: 23 End index: 24 Match: test Start index: 25 End index: 29 Match: string Start index: 30 End index: 36 ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值