我尝试使用以下正则表达式,它已经在C#中使用,在C ++中也是如此,但它在C ++中不起作用。
std::regex r = std::regex("([^%]*(%[.[0-9]*]?[a-z])*)*", std::regex::extended);
它设法匹配几个字符串并正确地拒绝其他字符串,但是在字符串上被卡住(真的卡住了 - 没有错误)&%34%小于可用的pbn%f%d"它应该拒绝(因为有一个%不会立即在法律后缀之后。)
使用std :: regex r = std :: regex("(([^%] )(%(\。([0-9] ))?[az] ))&#34);表现出与我之前描述的完全相同的行为。 (我假设这两个正则表达式是等价的 - 只有一个是规范形式,如C#使用,第二个是ECMAScript,如c ++默认值)
举一个我希望正则表达式匹配的例子是:
在状态%s(%d)中获得事件%s(%d),转移到州%s(%d)......
或
一些%.34x事件
正则表达式应该与以下内容不匹配:
一些%的东西
用语言解释正则表达式应该做什么 - 它应该接受唯一的字符串,其中所有出现的(如果有的话)%的字母前面都有一个字母或一个.46456x(也就是一些数字和一个字母)并拒绝所有其他人。