这个表达是什么意思?
Pattern.compile("^.*(?=.*\\d).*$", Pattern.CASE_INSENSITIVE | Pattern.COMMENTS)
我试图分割表达式的每个部分,但无法理解其含义。请帮助我。
答案 0 :(得分:0)
来自regex101.com:
<强> TL; DR: 强>
匹配至少包含数字的任何String
(字符'0'
至'9'
)。
作为附注,我想指出这是一种可怕的方式,可以用以下内容代替:
Pattern.compile("\\d");
我基本上删除了所有废话贪婪的填充物和无用的锚点。将此正则表达式与Matcher#find()
方法一起使用,而不是Matcher#matches()
。
答案 1 :(得分:0)
这个正则表达式有两个部分 1.直到(但不包括)数字的部分 2.从数字到字符串末尾的部分。
正则表达式从左到右处理。
它首先看到的是.*
。这告诉它直接进入
字符串的结尾并开始向后搜索以满足 - &gt;
它接下来要看的是(?=.*\d)
在该断言中,.*
由于之前的.*
而被忽略
因为它已经结束了。
因此搜索进展(使用断言)向左,直到找到
数字直接位于当前位置前面的位置。
一旦找到,它就匹配该数字,并且一直过去直到结束 字符串。这是上面描述的第2部分。
在视觉上,可以看到你是否添加了一些捕获组,并在某些上测试它 真正的输入。
^
( .* ) # (1)
(?=
( .* ) # (2)
( \d ) # (3)
)
( .* ) # (4)
$
输出:
** Grp 0 - ( pos 0 , len 15 )
12hh34ddd567uuu
** Grp 1 - ( pos 0 , len 11 )
12hh34ddd56
** Grp 2 - ( pos 11 , len 0 ) EMPTY
** Grp 3 - ( pos 11 , len 1 )
7
** Grp 4 - ( pos 11 , len 4 )
7uuu