java - 正则表达式量词和字符类

标签 java regex quantifiers

Java 教程中有正则表达式量词的示例和说明。

Greedy - 吃掉整个字符串然后后退一个字符再试一次

Regex: .*foo  // greedy 
String to search: xfooxxxxxxfoo
Found "xfooxxxxxxfoo"

勉强 - 从头开始​​然后一次吃一个字符

Regex: .*?foo  // reluctant quantifier
String to search: xfooxxxxxxfoo
Found "xfoo", "xxxxxxfoo"

占有式 - 吃掉整个字符串尝试一次匹配

Regex: .*+foo // possessive quantifier
String to search: xfooxxxxxxfoo
No match found

它们没问题,我理解它们,但是有人可以向我解释一下将正则表达式更改为字符类时会发生什么吗?还有其他规定吗?

Regex: [fx]*
String to search: xfooxxxxxxfoo
Found "xf","","","xxxxxxf","","","",""

Regex: [fx]*?
String to search: xfooxxxxxxfoo
Found 15 zero-length matches

Regex: [fx]*+
String to search: xfooxxxxxxfoo
Found "xf","","","xxxxxxf","","","",""

最佳答案

它将量词(贪婪、不情愿/懒惰、占有欲)应用于整个字符类。 这意味着它将匹配(贪婪地、惰性地等)字符类中的每个文字字符。

Regex: [fx]*
String to search: xfooxxxxxxfoo
Found "xf","","","xxxxxxf","","","",""

因此它寻找零个或多个 fx。引擎找到匹配的 xf。它还匹配两个 o 周围的空字符串。然后它匹配连续的 x,因为它是 fx 的零个或多个

我会查看 regex101.com有关正则表达式的更多详细信息,尤其是左侧栏中的调试器部分

关于java - 正则表达式量词和字符类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25190914/

相关文章:

java - 获取使用 3 个空格作为指定字符串第一次出现的子字符串以返回索引

javascript - 按前导零和尾随零分割数字

z3 - 定义自定义量词

Java 注解和 apt(基础)

java - 尝试在 Android Studio 中调用空对象引用上的虚拟方法

php - 重叠匹配 preg_match_all 和以重复字符结尾的模式

haskell - Haskell 中是否有任何值(value)级别的逻辑量词?

haskell - 作用域类型变量需要显式 foralls。为什么?

java - 了解字节缓冲区

Java 和 SEO URL