我想要一个regeular表达式来匹配序列。 我希望正则表达式匹配的顺序是NP,所以要确保在N之后有一个P并且在P之前存在N的字符串一直向下
1)NPNPNPNP =正确
2)NPNPPNP =不正确
抱歉的家伙我错过了第三部分与第三部分相关的部分
3)NNNPNPNNP =正确所以可以有很多N,但在N的末尾必须有一个P跟随上面
但我不认为我的正则表达是正确的,有人能告诉我哪里出错了吗?
std::string a ("NPNPNPPN");
boost::regex const string_matcher("\(NP\)*");
if(boost::regex_match(a,string_matcher))
{
DCS_LOG_DEBUG("Yes it Matches ");
}
else
{
DCS_LOG_DEBUG("No it does not Match");
}
答案 0 :(得分:5)
编辑:根据要求变更和评论更新&建议
^(N+P)+$
答案 1 :(得分:2)
对于修改后的问题,NP对由1个或多个N组成,后跟单个P,正则表达式为:
^(?:N+P)+$
(?:
N+
P
)
+
以确保至少存在一个NP类型对。 (即必须有一些东西要匹配。如果您希望它不区分大小写,请将regex_constants::icase
添加到正则表达式构造函数中。
答案 2 :(得分:0)
使用boost正则表达式,^(?:[^NP]*NP)*[^NP]*$
应该可以解决问题,我
认为。除N
或P
之外的任何序列,后跟NP
,
尽可能多地重复,然后是N
或以外的任何内容
一个P
。从文本开头开始,一直持续到
结束。 (如果不允许N
和P
以外的其他字符,那么
只需要^(?:NP)*$
。)
这是使用默认设置(Perl正则表达式,我认为)。
答案 3 :(得分:-1)
试试这个
boost::regex const string_matcher("^(NP)*$");