将两个正则表达式结果连接到一个输出字段中,一次只能使用一个
Join two regular expression results into one output field, when only one is possible at a time
我正在解析聊天输出以获取用户名。输出可能是这样的:
<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
相关文章:
- 有没有办法一次声明相同类型的多个对象,并通过一个表达式立即使用相同的右值初始化它们?
- 在 libsndfile 中一次写入一个通道
- 如何从文本文件中一次读取一个字符
- 一次包含一个 #include 表达式的多个头文件?
- 无法一次从二进制文件中读取一个 int
- 如何一次创建帧的一个实例
- 一次读取一个字节的 unicode
- 如何从 int 一次写入一个字节的文件?C++
- 当我输入一个字母时,cin 输入(输入是一个 int),而不是打印错误一次,它打印正确一次,然后在循环的其余部分打印 i
- 为什么调用 cout.operator<<(const char*) 打印地址而不是字符串? 如何创建一个函数本地静态"HashSet<char>"并初始化它一次?
- 一次读取一个字符的文件,直到使用 read(2) 和 write(2) 换行符
- C :用sizeof()operator在for for loop中增加一个int变量,只能工作一次
- 如果初始化需要shared_from_this,如何在一次调用中构建一个类
- 为什么一次打印一个字符比提前连接它们慢
- 快速简单的方法,以C++为单位一次读取一个字节的 stdin
- 尝试一次读取一个字符的矩阵
- 我如何仅一次或一次创建一个对象
- 使用迭代器时遇到问题,每 M 次传递一次擦除一个向量项
- Configure_file一次它创建一个目录及其子目录,一次它没有
- 循环在此代码中仅迭代一次,而在另一个代码中正确迭代