我正在解析聊天输出以获取用户名。输出可能是这样的:
<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
那么我应该如何编写这个正则表达式以使其在同一字段中包含用户名?另外,我可以让正则表达式忽略 (...|...)
吗? ?我只需要匹配用户名,而不是 <username>
或 (From username):
.
最佳答案
Boost 似乎支持 branch reset .所以你可以使用类似的东西:
^(?|<([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
关于c++ - 将两个正则表达式结果连接到一个输出字段中,但一次只能有一个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15559987/