正则表达式中的混淆

时间:2014-12-13 23:03:53

标签: regex hadoop mapreduce

private static Pattern inputPattern = Pattern.compile("(.*) (\\d*)"); 

我是编码的初学者。我正在努力理解并从网上学习。在上面的pattern.compile()行中,我无法理解。我阅读了关于注册模式的文档,但仍然无法将这些内容与括号中的内容联系起来。

有人可以向我解释一下吗?

2 个答案:

答案 0 :(得分:1)

以下是此正则表达式的各个部分:

(.*) =由{em>任意角色 ()

的零个或多个实例*组成的群组.

=空格

(\\d*) =由任意数字()的零个或多个实例*组成的群组\\d

所以这个正则表达式匹配" abcde 34454"和" 44"和" 445"但不是" abcde44"。 请注意\d是一个数字,但反斜杠需要转义,因此\\d

答案 1 :(得分:1)

Java PatternMatcher类的文档应该有所帮助: http://docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html http://docs.oracle.com/javase/8/docs/api/java/util/regex/Matcher.html

此外,我建议阅读有关正则表达式语法的内容。

回答你的问题:

.是一个正则表达式元素,它表示除换行符之外的任何字符

*是元素的标志,表示"前面元素中的零个或多个"。

\d是一个正则表达式元素,它表示任何单个整数0-9。

捕获由括号表示。 此表达式有两个捕获,一个用于.*,另一个用于\d*

捕获之间有一个空格,可以匹配单个文字空间。我建议改用\s

一些匹配的字符串:

"zxcvb 12345"
"zxcvb "
" 12345"

除非您计划从第一次和/或第二次捕获中检索信息,否则我会将表达式更改为更合适的内容。

示例:.*\s\d*