正则表达式的作用是什么?

时间:2015-06-26 16:39:10

标签: regex

这个表达是什么意思?

Pattern.compile("^.*(?=.*\\d).*$", Pattern.CASE_INSENSITIVE | Pattern.COMMENTS)

我试图分割表达式的每个部分,但无法理解其含义。请帮助我。

2 个答案:

答案 0 :(得分:0)

来自regex101.com

enter image description here

<强> 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