Java 正则表达式双新行

Java 正则表达式双新行,java,regex,Java,Regex,我要做的是取双线的左右部分。 范例 左侧和右侧部分可以是任何内容,但它们不包含双新行。 我所做的不起作用(与我给它的字符串不匹配)。这就是我到目前为止所做的 ^(.*)[\r\r|\n\n|\r\n\r\n]{1,1}(.*)$ 它可以从任何东西开始,后面紧跟着一个双新行,后面跟着任何东西。 我将左右分组,因为我需要在以后使用它们 编辑 我使用或来覆盖所有三种类型的新行它不起作用,因为您使用了一个字符类,它只匹配一个字符。你应该用括号。此外,您还可以通过使用{n}量词来简化正则表达式。要匹配\

我要做的是取双线的左右部分。 范例

左侧和右侧部分可以是任何内容,但它们不包含双新行。 我所做的不起作用(与我给它的字符串不匹配)。这就是我到目前为止所做的

^(.*)[\r\r|\n\n|\r\n\r\n]{1,1}(.*)$
它可以从任何东西开始,后面紧跟着一个双新行,后面跟着任何东西。 我将左右分组,因为我需要在以后使用它们

编辑
我使用或来覆盖所有三种类型的新行

它不起作用,因为您使用了一个字符类,它只匹配一个字符。你应该用括号。此外,您还可以通过使用
{n}
量词来简化正则表达式。要匹配
\r\r
,请使用
\r{2}

^(.*)(?:\r|\n|\r\n){2}(.*)$  
除此之外,我更希望使用以下方法为我的系统获取行分隔符:

String lineSeparator = System.getProperty("line.separator");
String regex = "^(.*)" + Pattern.quote(lineSeparator) + "{2}(.*)$  

它不起作用,因为您使用了一个字符类,它只匹配一个字符。你应该用括号。此外,您还可以通过使用
{n}
量词来简化正则表达式。要匹配
\r\r
,请使用
\r{2}

^(.*)(?:\r|\n|\r\n){2}(.*)$  
除此之外,我更希望使用以下方法为我的系统获取行分隔符:

String lineSeparator = System.getProperty("line.separator");
String regex = "^(.*)" + Pattern.quote(lineSeparator) + "{2}(.*)$  

方括号用于字符类,而不是分组。尝试使用parens:

^(.*)(\r\r|\n\n|\r\n\r\n)(.*)$
避免捕捉双新线

^(.*)(?:\r\r|\n\n|\r\n\r\n)(.*)$

{1,1}
也是冗余的。我删除了它。

方括号用于字符类,而不是分组。尝试使用parens:

^(.*)(\r\r|\n\n|\r\n\r\n)(.*)$
避免捕捉双新线

^(.*)(?:\r\r|\n\n|\r\n\r\n)(.*)$
{1,1}
也是冗余的。我删除了它。

试试这个:

(?m)^(.*)$[\r\n]{1,2}^$[\r\n]{1,2}^(.*)$
开关
(?m)
的作用是,对于正则表达式的其余部分,插入符号和美元在换行符之后和之前匹配

下面是这个正则表达式的一个例子。

试试这个:

(?m)^(.*)$[\r\n]{1,2}^$[\r\n]{1,2}^(.*)$
开关
(?m)
的作用是,对于正则表达式的其余部分,插入符号和美元在换行符之后和之前匹配

下面是此正则表达式的一个示例。

请尝试下一个:

^(.*)(?:(\r|\r?\n){2})(.*)$
试试下一个:

^(.*)(?:(\r|\r?\n){2})(.*)$


我正在通过tcp套接字接收消息。如果向我发送消息的系统无法接收\r\r?由于我在windows上运行,因此行分隔符将为\r\n,并且它将不匹配。我说得对吗?当然,我没有提到我的消息的来源,所以你的想法是正确的。这里使用量词有问题(仅第一个正则表达式),它也将匹配
a\r\nB
,这被视为一个换行符。是的,你是对的。你已经回答了我的问题,所以它被接受并投票,但是你介意解释量词问题吗?对不起,我改变了被接受的答案。杰瑞也给出了答案,他指出了量词的问题。感谢Rohit的帮助。@alkis使用
(?:\r\124n\r\n){2}
,这允许
\r\r
\n\r\n
\r\n\r\n
,但也允许
\r\n
\r\n
\r\n\r\n
,等等,其中您可以匹配一行内容,也需要一些时间才能回复(抱歉:s)我正在通过tcp套接字接收消息。如果向我发送消息的系统无法接收\r\r?由于我在windows上运行,因此行分隔符将为\r\n,并且它将不匹配。我说得对吗?当然,我没有提到我的消息的来源,所以你的想法是正确的。这里使用量词有问题(仅第一个正则表达式),它也将匹配
a\r\nB
,这被视为一个换行符。是的,你是对的。你已经回答了我的问题,所以它被接受并投票,但是你介意解释量词问题吗?对不起,我改变了被接受的答案。杰瑞也给出了答案,他指出了量词的问题。感谢Rohit的帮助。@alkis使用
(?:\r\124n\r\n){2}
,这允许
\r\r
\n\r\n
\r\n\r\n
,但也允许
\r\n
\r\n
\r\n\r\n
,等等,其中您可以匹配一行内容,也需要一些时间才能回复(抱歉:s)这会涵盖所有三种类型的新行吗?@alkis是的,但我认为这会抛出一个错误,因为
+{2}
(如果这不会抛出和出错,它也会允许2个以上的新行)。@alkis我已经修复了它(最后!)。单击链接查看它是否正常工作。@Jerry,请告诉我,我已经修好了。单击链接查看它是否正常工作。感谢您的辛勤工作。我现在没有精力彻底测试它,但它似乎工作得很好(我不知道m标识符,所以我也学到了一些新东西)。这会涵盖所有三种类型的新行吗?@alkis是的,但我认为这会因为
+{2}
(如果这没有抛出和出错,它还将允许2条以上的换行)。@alkis我已经修复了它(终于!)。单击链接查看它的工作情况。@Jerry fyi我已经修复了它。单击链接查看它的工作情况。感谢您的辛勤工作。我现在没有精力彻底测试它,但它似乎工作得很好(我不知道m标识符,所以我也学到了一些新的东西)。我接受这个答案,因为您提供了解决方案并再次指出了量词.Thnx的问题。
^(\r\r\n\r\n\r\n)$
这实际上也可以。如果你不想选择任何其他字符。@Vixson-Hmm不太清楚?这一个只得到双线,而问题是双线前后的部分,所以可能你在解决另一个问题?我接受这个答案,因为你提供了解决方案并指出了问题所在再次使用量词.Thnx.lem。
^(\r\r\n\r\n\r\n)$
这实际上也很有效。如果您不想选择任何其他字符。@Vixson-Hmm不太好?这一个只获得双线,而问题是询问双线前后的部分,所以可能您正在解决另一个问题?您永远不需要{1,1}。它可以缩短为{1},但不是ne