Java正则表达式模式

Java正则表达式模式,java,regex,Java,Regex,所以我遇到了一段正则表达式模式代码: .*?(callback|cron)$ 我认为*?表示任何字符出现零次或多次,但不确定其余字符:3 (callback|cron)$ $表示匹配行尾 因此,这意味着如果字符串中有一个以callback或cron结尾的单词,那么它就是真的 示例: String s = "lawlasd callback"; System.out.println(s.matches(".*?(callback|cron)$")); true 结果:

所以我遇到了一段正则表达式模式代码:

.*?(callback|cron)$
我认为
*?
表示任何字符出现零次或多次,但不确定其余字符:3

(callback|cron)$
$
表示
匹配行尾

因此,这意味着如果字符串中有一个以
callback
cron
结尾的单词,那么它就是真的

示例:

    String s = "lawlasd callback";
    System.out.println(s.matches(".*?(callback|cron)$"));
true
结果:

    String s = "lawlasd callback";
    System.out.println(s.matches(".*?(callback|cron)$"));
true

现在,如果字符串仅为
lawlasd
,它将返回
false
,因为它不会以单词
callback
cron
结尾,以继续@Rod\u Algonquin的回答:您可以在这里看到一个示例,它将更详细地解释每个组件

*?匹配任何字符(换行符除外)量词:介于零之间 无限次,尽可能少的次数,根据需要扩展 [懒惰的]

第一个捕获组(回调| cron) 第一种选择:回调 callback与字符callback字面匹配(区分大小写)

第二种选择:cron cron按字面意思匹配字符cron(区分大小写)

$assert字符串末尾的位置


它将匹配一行,其中callback或cron是该行的最后一个字符串。只要它位于字符串的末尾,它也将与“dodecahemidodecacron”匹配

。请查看此用法
\b
,以查找缺少的单词匹配。它应该是
\b(回调| cron)$