如何在多行上匹配正则表达式

我有一个文本正文,我正在尝试在其中找到一个字符序列。 String.contains()不起作用,所以我试图使用String.matches方法和正则表达式。 我现在的正则表达式不起作用。 以下是我的尝试:

 "1stline\r\n2ndline".matches("(?im)^1stline$"); // returns false; I expect true "1stline\r\n2ndline".matches("(?im)^1stline$") // returns false "1stline\r\n2ndline\r\n3rdline".matches("(?im)^2ndline$") "1stline\n2ndline\n3rdline".matches("(?im)^2ndline$") "1stline\n2ndline\n3rdline".matches("(?id)^2ndline$") 

我应该如何格式化我的正则表达式,使其返回true?

您需要使用s标志(而不是m标志)。

它被称为DOTALL选项。

这对我有用:

  String input = "1stline\n2ndLINE\n3rdline"; boolean b = input.matches("(?is).*2ndline.*"); 

我在这里找到了 。

注意,如果要使用String.matches() ,则必须在正则表达式之前和之后使用.*

那是因为String.matches()尝试将整个字符串与模式匹配。

.* 表示在正则表达式中使用时零个或多个字符


另一种方法,在这里找到:

  String input = "1stline\n2ndLINE\n3rdline"; Pattern p = Pattern.compile("(?i)2ndline", Pattern.DOTALL); Matcher m = p.matcher(input); boolean b = m.find(); print("match found: " + b); 

我通过谷歌搜索"java regex multiline"并点击第一个结果找到了它。

这几乎就像那个答案是为你而写的……

这里有关于模式和正则表达式的大量信息。


如果只想 2ndline出现在行的开头时匹配,请执行以下操作:

  boolean b = input.matches("(?is).*\\n2ndline.*"); 

或这个:

  Pattern p = Pattern.compile("(?i)\\n2ndline", Pattern.DOTALL); 

你可以尝试使用contains

它会是这样的

 yourString.contains("(.+\\r\\n)+(.)+(wordYouAreLookingFor)"); 

顺便说一句,使用@wdziemia的相同例子,我不是REGEX的专家…… 🙂

希望能帮助到你。

如果您正在尝试查看"1stline\r\n2ndline\r\n3rdLine"字符串中是否存在"1stline\r\n2ndline\r\n3rdLine"那么您可以执行以下操作:

 String test1= "1stline\r\n2ndline\r\n3rdLine"; System.out.println(test1.contains("1stline")); //returns true 

– – – – – – – – – – – – – – 编辑 – – – – – – – – – – – ——-

所以出于某种原因.contains不会在你的测试中起作用。 这是找到字符串“1stline”的正则表达式

  String regex = "([\\r\\n]|.)*(1stline)+([\\r\\n]|.)*"; String test1= "1stline\r\n2ndline\r\n3rdLine"; System.out.println(test1.contains("1stline")); //returns true String test2 = "1stline\r\n2ndline\r\n3rdLine"; System.out.println(test2.matches(regex)); //returns true String test3 = "1stline\r\n"; System.out.println(test3.matches(regex)); //returns true String test4 = "1stline"; System.out.println(test4.matches(regex)); //returns true String test5 = "\r\n2ndline\r\n3rdLine"; System.out.println(test5.matches(regex)); //returns false String test6 = "n2ndlinen2ndlinen2ndline\r\n2ndline\r\n4rdLine"; System.out.println(test6.matches(regex)); //returns false