Java 如何用单个正则表达式解析这些字段?

Java 如何用单个正则表达式解析这些字段?,java,regex,Java,Regex,我需要用一个正则表达式获取粗体字段 CP-MGMTxpand[2859]:由用户管理员通过服务数据库集从本地主机更改配置 路由的[4006]:rt_实例_监视器_作业:计划在5秒内进行下一个实例监视器 CP_防火墙:2017年7月2日18:52:23接受ip地址消息 我尝试了以下模式 (?:<\d{1,3}>)\s*(\S+?)(?:\[\d*\])?:(.*) - failed for 1st log (?:<\d{1,3}>)(?:\S*\s)?([^\[\]]+?

我需要用一个正则表达式获取粗体字段

CP-MGMTxpand[2859]:由用户管理员通过服务数据库集从本地主机更改配置

路由的[4006]:rt_实例_监视器_作业:计划在5秒内进行下一个实例监视器

CP_防火墙:2017年7月2日18:52:23接受ip地址消息

我尝试了以下模式

(?:<\d{1,3}>)\s*(\S+?)(?:\[\d*\])?:(.*) - failed for 1st log

(?:<\d{1,3}>)(?:\S*\s)?([^\[\]]+?)(?:\[\d*\])?:\s(.*) - failed for 2nd and 3rd logs
(?:)\s*(\s+?)(?:\[\d*\])?:(*)-第一次日志失败
(?:)(?:\S*\S)([^\[\]]+?)(?:\[\d*\])?:\S(.*)对于第二个和第三个日志失败
请原谅我的错误。提前感谢

这句话

<\d{1,3}>\s*.*?(\S+?)(?:\[\d*\])?\s*:\s*(.*)
\s**?(\s+?)(?:\[\d*\])?\s*:\s*(*)
可能就行了

试验
import java.util.regex.Matcher;
导入java.util.regex.Pattern;
公共类re{
公共静态void main(字符串[]args){
最后一个字符串regex=“\\s**?(\\s+?)(?:\\[\\d*\\])?\\s*:\\s*(*);
final String=“CP-MGMT xpand[2859]:由用户管理员通过服务dbset从本地主机更改的配置\n\n”
+“路由[4006]:rt\u实例\u监视器\u作业:计划在5秒后进行下一个实例监视器\n\n”
+“CP_防火墙:2017年7月2日18:52:23接受ip地址消息”;
最终模式=Pattern.compile(regex,Pattern.MULTILINE);
final Matcher Matcher=pattern.Matcher(字符串);
while(matcher.find()){
System.out.println(“完全匹配:+matcher.group(0));

对于(int i=1;i可以使用以下正则表达式:

(?:(?<=\s)\w+(?=\[))|(?:(?<=>)\w+(?=\[|:))
(?:(?
[或:

此正则表达式适用于您提供的示例数据:

(?:<\d{1,3}>).*?([^[]+?(?=:)|\w+(?=\[\d{4}\]:))
(?:).*([^[]+(?=:)\w+(?=\[\d{4}\]:))
它寻找

  • 包含在
  • 最少数量的字符;后跟
  • 一组非
    [
    字符,后跟
  • 字符后跟一些数字,这些数字包含在
    []
您想要的值在组1中


Hi@Emma请检查此->,在第一个日志中,我只需要xpand而不是CP-MGMTxpand@Emma恕我直言,这仍然不符合OP在问题中提出的要求。谢谢@Nick:)很抱歉,我无法对你的答案进行投票,因为我没有那么多的声誉:(但这对我帮助很大。@Selva别担心。我很高兴这对我有所帮助。
(?:(?<=\s)\w+(?=\[))|(?:(?<=>)\w+(?=\[|:))
(?:<\d{1,3}>).*?([^[]+?(?=:)|\w+(?=\[\d{4}\]:))