将两个正则表达式结果连接到一个输出字段中,一次只能使用一个

Join two regular expression results into one output field, when only one is possible at a time

本文关键字:一个 一次 输出 结果 正则表达式 两个 连接 字段      更新时间:2023-10-16

我正在解析聊天输出以获取用户名。输出可能是这样的:

<Darker> MC_BOT sethome
(From Darker): MC_BOT exit

我需要匹配用户名和字符串中的命令内容。从两个字符串中获取这些数据很容易:

^(<([A-Za-z0-9_]+)>|\(From ([A-Za-z0-9_]+)\):) MC_BOT ([a-z]+)( [a-zA-Z0-9 ]+)?$
  |<Darker>         |(From Darker):                     |sethome

问题是,对于<Darker>的输出字段2被使用,但对于(From Darker),解析器使用字段3。

<Darker> MC_BOT command parameters
   1: <Darker>
   2: Darker  - field 2!
   3: 
   4: command
   5:  parameters

(From Darker): MC_BOT command parameters
   1: (From Darker):
   2: 
   3: Darker  - field 3!
   4: command
   5: parameters   

那么我应该如何写这个regexp使它包含用户名在同一字段?此外,我可以使regexp忽略(...|...)吗?我只需要匹配用户名,而不是<username>(From username):

Boost似乎支持分支复位。你可以这样写:

^(?|<([A-Za-z0-9_]+)>|(From ([A-Za-z0-9_]+)):) MC_BOT ([a-z]+)( [a-zA-Z0-9 ]+)?$
 ^   ^                       ^                          ^       ^
 |     group 1                also group 1              g.2    group 3
 |
  branch reset