Java Regex忽略了没有Dotall的换行符

时间:2013-11-13 07:51:55

标签: java regex

我必须为特定的对象ID解析返回的电子邮件。问题是,当返回电子邮件时,id可以分成几行。通常它应该是这样的:

foo#bar-20130101-103000#12345

whereat我对最后一部分“12345”感兴趣。问题是该字符串往往被换行符分割,例如:

foo#bar-20130101-103000#12
345

导致我的正则表达式

[a-zA-Z0-9äöüÄÖÜß]{1,5}#[a-zA-Z0-9äöüÄÖÜß]{1,5}-\d{8}-\d{6}#(\d+)

只找到“12”而不是“12345”。现在我在网上找到的所有提示都是使用Pattern.MULTILINE和/或Pattern.DOTALL,但是多行只会影响^和$ anchors,而dotall只会影响。也适用于换行符。问题是我没有。这里也不是真的适用,因为我只想要数字。 那么我怎么能让我的正则表达式匹配整个事情而不是停在换行符?

2 个答案:

答案 0 :(得分:0)

由于您的号码最终可以尝试:

"(?s)^[a-zA-Z0-9äöüÄÖÜß]{1,5}#[a-zA-Z0-9äöüÄÖÜß]{1,5}-\d{8}-\d{6}#(.*)$"

即。使用#

捕获DOTALL后的所有内容

以下内容也可以在没有DOTALL的情况下使用:

"^[a-zA-Z0-9äöüÄÖÜß]{1,5}#[a-zA-Z0-9äöüÄÖÜß]{1,5}-\d{8}-\d{6}#[\\d\\r\\n]+$"

答案 1 :(得分:0)

[\d\r\n]会匹配数字或新行,因此请尝试使用([\d\r\n]+)