1

我有以下一段代码:

String myString;
boolean myResult;

myString = "First\nSecond\nThird\nFourth";
myResult = myString.matches("First.*");
myResult = myString.matches(".*First.*");
myResult = myString.matches(".*Second.*");
myResult = myString.matches("First\nSecond\nThird\nFourth");

最后一个返回true,其余的都是false...

我虽然所有上述表达式都会返回 true。我还需要找到以“First”开头的字符串,我认为第一个 .matches() 会覆盖它,但事实并非如此。它应该是什么样子?

4

4 回答 4

2

.* 可能不匹配 \n

将最后一个匹配模式中的一个 \n 替换为 . 看看会发生什么。

于 2012-08-02T12:55:01.923 回答
2

默认情况下,点不匹配行尾字符,但如果您在正则表达式字符串前面加上 (?s),那么它将匹配它们。这将启用DOTALL匹配标志。

于 2012-08-02T13:00:11.303 回答
1

您可以尝试从字面上指定 \n\r :

myResult = myString.matches("First(.|[\n\r])*")
于 2012-08-02T13:06:29.937 回答
1

请参阅文档

. 任何字符(可能匹配也可能不匹配行终止符)

于 2012-08-02T12:57:48.957 回答