匹配匹配任何直到'%'不跟'%'然后跟一组字符
Matching matching anything till '%' not followed by '%' and followed by a set of chars
我想匹配所有内容,直到找到奇数个 %
后跟 2 个可选组和 1 个必填组。 (这些组类似于 C++ std::printf("%22lld")
)
我正尝试在 C++ 中执行此操作,并且我已经尝试了这两个正则表达式:
第一个支持'%'的奇数,但如果强制组为空则不支持:
.*?(?=%([0-9.]*)([lhjztL]*)([cCdiouxXeEfgGaAnpsSZRr]))
(可单独捕获%但不超过1%)
这个可以处理 % 的奇数个案,但如果 % 的奇数个必填字段为空则不能:
((([^%]*)(?!\s)(?:%{2})*)*%)([0-9.]*)([lhjztL]*)([cCdiouxXeEfgGaAnpsSZRr])
我使用的 C++ 版本不支持后视,但它支持前视。
测试字符串:arg1 %%d arg %22lld,应该匹配
group1: arg1 %%d arg%
group2:22
group3:ll
group3:d
测试字符串:arg % %1586lld asd %d 应该匹配
group1: arg % %1586lld asd %
group2:
group3:
group3:d
这是我尝试过的链接。
这个正则表达式应该符合您的需要:
/([^\s].*?(?:%(?:%%)*))([0-9.]*)([lhjztL]*)([cCdiouxXeEfgGaAnpsSZRr])/g
我想匹配所有内容,直到找到奇数个 %
后跟 2 个可选组和 1 个必填组。 (这些组类似于 C++ std::printf("%22lld")
)
我正尝试在 C++ 中执行此操作,并且我已经尝试了这两个正则表达式:
第一个支持'%'的奇数,但如果强制组为空则不支持:
.*?(?=%([0-9.]*)([lhjztL]*)([cCdiouxXeEfgGaAnpsSZRr]))
(可单独捕获%但不超过1%)
这个可以处理 % 的奇数个案,但如果 % 的奇数个必填字段为空则不能:
((([^%]*)(?!\s)(?:%{2})*)*%)([0-9.]*)([lhjztL]*)([cCdiouxXeEfgGaAnpsSZRr])
我使用的 C++ 版本不支持后视,但它支持前视。
测试字符串:arg1 %%d arg %22lld,应该匹配
group1: arg1 %%d arg%
group2:22
group3:ll
group3:d
测试字符串:arg % %1586lld asd %d 应该匹配
group1: arg % %1586lld asd %
group2:
group3:
group3:d
这是我尝试过的链接。
这个正则表达式应该符合您的需要:
/([^\s].*?(?:%(?:%%)*))([0-9.]*)([lhjztL]*)([cCdiouxXeEfgGaAnpsSZRr])/g