两个字符之间的Java正则表达式包括新行或制表符

两个字符之间的Java正则表达式包括新行或制表符,java,regex,matcher,Java,Regex,Matcher,我对两个字符串之间的正则表达式有问题。我希望获取字符串#和#之间的值,但当我有新行时,此正则表达式不起作用(在我的情况下是\r\n)。例如: #89899# #this is string I have problem# 我对2号线有问题,因为我有新的线路。如何排除正则表达式中的新行?我的代码: public static List parserStringBetween(String param1, String param2, String data) { List result

我对两个字符串之间的正则表达式有问题。我希望获取字符串
#
#
之间的值,但当我有新行时,此正则表达式不起作用(在我的情况下是
\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;
}
公共静态列表ParserStringBeween(字符串参数1、字符串参数2、字符串数据){
列表结果=空;
如果(param1!=null&&!“.equalsIgnoreCase(param1)&¶m2!=null&&!”。equalsIgnoreCase(param2)
&&数据!=null&!“.equalsIgnoreCase(数据)){
结果=新的ArrayList();
Matcher m=Pattern.compile(“\\\”+param1+”(.**?\\”+param2.Matcher(数据);
while(m.find()){
结果:添加(m组(1));
}
}
返回结果;
}
param1
param2
是设置之间的字符串,即
#
。如何解决此问题?

要同时包含换行符和空格,请使用:

^#[\s\S]*#$
看看吧

您的java代码变成:

Matcher m = Pattern.compile("^" + param1 + "[\\s\\S]*" + param2 + "$").matcher(data);
您也可以使用模式

Matcher m = Pattern.compile("\\" + param1 + "(.*?)\\" + param2, Pattern.DOTALL).matcher(data);

通过
(?s)
,添加
DOTALL
标志:


请注意使用
\Q..\E
正确转义分隔符。只是在前面加上反斜杠并不适用于所有情况。

我的正则表达式在没有新行的情况下工作,但是字符串中有时有\r\n个字符,正则表达式不工作,因为include\r\n。。有解决办法吗?您的正则表达式不起作用。@bob所以您想在输出中包含带有
\r\n
的字符串吗?@bob您只需要将DOTALL选项打开为Pattern.compile($regex,[u选项])标准
Pattern.compile("\\Q" + param1 + "\\E(?s)(.*?)\\Q" + param2 + "\\E")