【问题标题】:Java multi-line regular expression debuggingJava多行正则表达式调试
【发布时间】:2012-12-21 10:40:29
【问题描述】:

在Java中,下面的正则表达式

To: a@b\.com.*Subject: Please verify your email address

不知何故在此文本中找不到匹配项:

Dez 21, 2012 10:29:58 AM com.google.appengine.api.datastore.dev.LocalDatastoreService init
INFO: Local Datastore initialized: 
    Type: High Replication
    Storage: In-memory
Dez 21, 2012 10:29:58 AM com.google.appengine.api.mail.dev.LocalMailService log
INFO: MailService.send
Dez 21, 2012 10:29:58 AM com.google.appengine.api.mail.dev.LocalMailService log
INFO:   From: 
Dez 21, 2012 10:29:58 AM com.google.appengine.api.mail.dev.LocalMailService log
INFO:   To: a@b.com
Dez 21, 2012 10:29:58 AM com.google.appengine.api.mail.dev.LocalMailService log
INFO:   Subject: Please verify your email address
Dez 21, 2012 10:29:58 AM com.google.appengine.api.mail.dev.LocalMailService log
INFO:   Body:
Dez 21, 2012 10:29:58 AM com.google.appengine.api.mail.dev.LocalMailService log
INFO:     Content-type: text/plain
Dez 21, 2012 10:29:58 AM com.google.appengine.api.mail.dev.LocalMailService log
INFO:     Data length: 4

我的 Java 代码如下所示:

    Matcher matcher = Pattern.compile(regex, Pattern.MULTILINE).matcher(input);
    if (matcher.find()) {
        ...
    }

这有点奇怪,因为当我使用此工具在线测试时,该模式似乎有效:http://regexpal.com

因此,Java 对模式的解释肯定有所不同。有什么办法可以得到Matcher的错误信息?

更新应该会找到:

To: a@b.com
Dez 21, 2012 10:29:58 AM com.google.appengine.api.mail.dev.LocalMailService log
INFO:   Subject: Please verify your email address

【问题讨论】:

  • 好吧,我在您显示的输入文本中找不到与该正则表达式相关的任何文本。
  • @RohitJain 文本中有匹配项。我更新了我的问题。

标签: java regex multiline


【解决方案1】:

您需要使用Pattern.DOTALL 而不是Pattern.MULTILINE

DOTALL 使 . 匹配换行符。 (这就是你想要的)

MULTILINE 使 ^$ 在每行基础上工作。

【讨论】:

  • 太棒了,这就是我所缺少的。谢谢。
猜你喜欢
  • 2011-05-08
  • 2016-10-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-29
相关资源
最近更新 更多