我在2个字符串之间遇到了正则表达式问题。我想在字符串#
和#
之间获取值,但是当我换行时(在我的情况下,\r\n
),此正则表达式不起作用。例如:
#89899#
#this is string I have
problem#
第2行有问题,因为有新行。如何在正则表达式中排除换行符?我的代码:
public static List parserStringBetween(String param1, String param2, String data) {
List result = null;
if (param1 != null && !"".equalsIgnoreCase(param1) && param2 != null && !"".equalsIgnoreCase(param2)
&& data != null && !"".equalsIgnoreCase(data)) {
result = new ArrayList<>();
Matcher m = Pattern.compile("\\" + param1 + "(.*?)\\" + param2).matcher(data);
while (m.find()) {
result.add(m.group(1));
}
}
return result;
}
param1
和param2
是设置之间的字符串,即此处的#
。如何解决这个问题?
答案 0 :(得分:2)
通过DOTALL
添加(?s)
标志:
Pattern.compile("\\Q" + param1 + "\\E(?s)(.*?)\\Q" + param2 + "\\E")
还请注意使用\Q...\E
来正确转义定界符。只是在所有情况下都不能使用反斜杠。
答案 1 :(得分:1)
还要包括换行符和空格 ,请使用:
^#[\s\S]*#$
您的Java代码变为:
Matcher m = Pattern.compile("^" + param1 + "[\\s\\S]*" + param2 + "$").matcher(data);
您也可以使用Pattern.DOTALL
模式。
Matcher m = Pattern.compile("\\" + param1 + "(.*?)\\" + param2, Pattern.DOTALL).matcher(data);