2011-09-14 24 views
1

我用perl的,Unix和Java的正则表达式很多时间,但我在Java中很惊讶有关:字符串相匹配的正则表达式

"help".matches("^h") 

是假的!

从Java文件: http://docs.oracle.com/javase/8/docs/api/java/lang/String.html#matches-java.lang.String-

“当且仅当此字符串给定的正则表达式匹配”

 "help".matches("^h.*") 

 "help".matches("^h.*$") 

当然真正的回报。

只有我感到惊讶吗?

+1

是什么问题?我们感到惊讶吗? – amit

+0

因为似乎表达式被解释为'“^表达$”'在它的末尾添加一个'$'。我也期待与第一个例子的匹配。 – Matteo

+0

Java的正则表达式是愚蠢的。你是完全正确的。该方法匹配IS破碎。看看这里:http://mentaregex.soliveirajr.com – TraderJoeChicago

回答

1

"help"不是macth "^h"。只有help匹配中的第一个字母"^h"

+0

但在这种情况下,'^'变得毫无用处。正则表达式的开始总是一个'^':为什么它在规范中呢? – Matteo

+0

我不确定'^'总是正则表达式的开始。例如,'help'中的'el'部分与'lp'表达式匹配 –

+0

'el'与'lp'表达式匹配的意思是什么?我做了一些测试,看起来你必须匹配整个字符串。 – Matteo

1

Java比说perl或ruby更严格一些。它试图匹配整个字符串,并且“帮助”在/^h /不匹配的末尾会有一个额外的elp。

docs

告知此字符串是否给定的正则表达式匹配。

不是子字符串,整个字符串。

+0

但是在这种情况下,为什么在任何匹配中隐含'^'和'$'? – Matteo

+0

多行模式,http://download.oracle.com/javase/1.4.2/docs/api/java/util/regex/Pattern.html#MULTILINE是一种情况。 –

+0

我看到了,我只是想象它的行为是perl,但实际上没有:-)在'MULTILINE'的文档中,我们可以读取_By默认情况下这些表达式只匹配整个输入序列的开始和结束。默认情况下提到,但没有任何意义... – Matteo