1

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

foo#bar-20130101-103000#12345

我对最后一部分“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,但多行只影响 ^ 和 $ 锚点,而 dotall 只影响 . 也匹配换行符。问题是我没有 . 在这里,它也不是真的适用,因为我只想要数字。那么我怎样才能让我的正则表达式匹配整个事情而不是停在换行符处呢?

4

2 回答 2

0

[\d\r\n]将匹配一个数字或一个新行,所以尝试使用([\d\r\n]+).

于 2013-11-13T07:56:07.843 回答
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]+$"
于 2013-11-13T07:54:30.870 回答