大家好,帮我理解一下下面的几个java里的正则表达式的意思?在java的Pattern类里出来的

Greedy 数量词
X? X,一次或一次也没有
X* X,零次或多次
X+ X,一次或多次
X{n} X,恰好 n 次
X{n,} X,至少 n 次
X{n,m} X,至少 n 次,但是不超过 m 次

Reluctant 数量词
X?? X,一次或一次也没有
X*? X,零次或多次
X+? X,一次或多次
X{n}? X,恰好 n 次
X{n,}? X,至少 n 次
X{n,m}? X,至少 n 次,但是不超过 m 次

Possessive 数量词
X?+ X,一次或一次也没有
X*+ X,零次或多次
X++ X,一次或多次
X{n}+ X,恰好 n 次
X{n,}+ X,至少 n 次
X{n,m}+ X,至少 n 次,但是不超过 m 次
例如 X?? X,一次或一次也没有 为什么这样代表呢。?号不是代表的是一个字符吗?两个??为什么就成了一次或一次也没有了。再给我说说如果按它上面说的应怎么使用呢?
最新回答
后悔那段情╮

2021-11-03 21:11:13

aaaax?bbbbb

? 限定 'x' 出现1次或0次 可匹配 "aaaaxbbbbb" 也可匹配 "aaaabbbbb"

--------------------------------

aaaax*bbbbb

* 限定 'x' 出现任意次 可匹配 "aaaabbbbb" 也可匹配 "aaaaxxxxxbbbbb" 也可匹配 "aaaaxxxxxxxxxxxxxxxbbbbb" 多少个 x 都行

--------------------------------

aaaax+bbbbb

+ 限定 'x' 出现1次或1次以上 可匹配 "aaaaxbbbbb" 也可匹配"aaaaxxxxxbbbbb" 也可匹配"aaaaxxxxxxxxxxxxbbbbb"多少个 x 都行,就不能没有 'x'

--------------------------------

aaaax{3}bbbbb

{3} 限定 'x' 出现3次或3次以上 可匹配 "aaaaxxxbbbbb"

--------------------------------

aaaax{3,}bbbbb

{3,} 限定 'x' 出现3次 可匹配 "aaaaxxxbbbbb" 也可匹配"aaaaxxxxxbbbbb" 也可匹配"aaaaxxxxxxxxxxxxbbbbb"多少个 x 都行,就不能小于3次

--------------------------------

aaaax{3,5}bbbbb

{3,5} 限定 'x' 出现3次至5次 可匹配 "aaaaxxxbbbbb" 也可匹配"aaaaxxxxxbbbbb" 也可匹配"aaaaxxxxbbbbb" 不能小于3次,不能大于5次

--------------------------------
--------------------------------
--------------------------------
--------------------------------
--------------------------------

相信楼主能明白 ?, +, *, {n}, {n,}, {n,m} 的意思了

如果在限定符后边再加上一个 ?

变成 ??, +?, *?, {n}?, {n,}?, {n,m}?

那么它就是懒惰模式

不加的就是贪婪模式

比如有 原文: "----------AzzzzzzzzzzzzAxxxxxxxxxxA--------"

那么
表达式
"A\w*A" 会匹配 "AzzzzzzzzzzzzAxxxxxxxxxxA" 这部分
那么 表达式 "A\w*?A" 会匹配 "AzzzzzzzzzzzzA" 这部分

贪梦模式, 尽可能多的匹配

懒惰模式, 尽可能少的匹配
那一抹浅笑

2023-11-21 12:42:55

问号是说,前面的那个字符,出现0次或1次。X??,第二个问号是非贪婪匹配的意思,就是说,可以匹配多次,也可以匹配少次的时候,只匹配少次。
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import org.w3c.dom.NodeList;

public class RegTeest {

public static void main(String[] args) {

String s = "123good456";
Pattern pattern = Pattern.compile("goo??");
Matcher matcher = pattern.matcher(s);
while(matcher.find()){
System.out.println("|" + matcher.group() + "|");
}
}
}
结果是|go|
如果用一个问号,结果是|goo|