我有一个文本正文,我正在尝试在其中找到一个字符序列。 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?
答案 0 :(得分:13)
您需要使用s
标志(而不是m
标志)。
它被称为DOTALL
选项。
这对我有用:
String input = "1stline\n2ndLINE\n3rdline";
boolean b = input.matches("(?is).*2ndline.*");
我发现它here。
注意,如果要使用String.matches()
,则必须在正则表达式之前和之后使用.*
。
那是因为String.matches()
尝试将整个字符串与模式匹配。
(.*
在正则表达式中使用时表示零个或多个字符
找到另一种方法here:
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);
我通过Google搜索"java regex multiline"
并点击first result找到了它。
(几乎就好像那个答案是为你而写的...... )
关于模式和正则表达式here有很多信息。
如果您只想 2ndline
出现 的匹配,请执行以下操作:
boolean b = input.matches("(?is).*\\n2ndline.*");
或者这个:
Pattern p = Pattern.compile("(?i)\\n2ndline", Pattern.DOTALL);
答案 1 :(得分:0)
如果您要查看字符串"1stLine"
中是否存在"1stline\r\n2ndline\r\n3rdLine"
,那么您可以执行以下操作:
String test1= "1stline\r\n2ndline\r\n3rdLine";
System.out.println(test1.contains("1stline"));
//returns true
<强> ---------------------------- EDIT --------------- ------------- 强>
所以出于某种原因.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
答案 2 :(得分:0)
您可以尝试使用contains
这就像是
yourString.contains("(.+\\r\\n)+(.)+(wordYouAreLookingFor)");
顺便说一句,使用@wdziemia的相同例子,我不是REGEX的专家......:)
希望它有所帮助。