java - 正则表达式在java中的两个表达式之间提取字符串

标签 java regex string

我有一个包含已发送和已接收消息的日志文件。我想使用正则表达式提取这些消息。这是日志文件的示例:

Message recieved:0908082349234 Session: ...
A message is sent: 12344384834

我编写了以下正则表达式来提取消息:

String pattern = "((A message is sent: )|(Message received:))(.*)(( Session:)|$)";

而且它不起作用。我尝试了许多不同的形式,但都没有奏效。我想用一个正则表达式来做到这一点。现在我使用一个正则表达式发送,另一个正则表达式接收。但是应该有一种方法可以对它们都使用一个正则表达式!

最佳答案

.* 贪婪匹配。使用非贪婪版本(.*?):

String pattern = "(A message is sent: |Message received:)(.*?)( Session:|$)";

顺便说一句,给定的日志文件包含错字。如果日志文件确实包含拼写错误,您应该相应地调整正则表达式。

Message recieved:0908082349234 Session: ...
           ^^

关于java - 正则表达式在java中的两个表达式之间提取字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20771679/

相关文章:

java - 在类中定义 Logger 实例的最佳方法

java - java正则表达式的修改

string - 如何 fmt.Printf 带有千位逗号的整数

java - ArrayAdapter 可能导致应用程序崩溃

java - 将数据集 <row> 预测中的 vector 数据类型 "probability"列转换为数组?

java - 与 jackson 在中间表上的无限递归

c# - 我在使用 C# 中的多行正则表达式时遇到问题,我该如何解决?

python - 为什么我的代码会过滤掉我不要求它过滤的字符? (Python)

java - 使用多个随机换行创建新字符串

c# - 如何修剪 IP 地址以获得它的前 3 部分?