用于匹配序列的正则表达式

Regular Expression to match a sequence

本文关键字:正则表达式 用于      更新时间:2023-10-16

我想要一个与序列匹配的地理表达式。我希望正则表达式匹配的序列是 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");
 }

编辑:根据要求更改和评论和建议进行更新

^(N+P)+$

这是一些测试

有关正则表达式的进一步阅读 http://www.regular-expressions.info/tutorial.html

对于您修改后的问题,其中 NP 对由 1 个或多个 N 组成,后跟一个 P,正则表达式将是:

^(?:N+P)+$
  • 这是一个非捕获括号(?:
  • 后跟 1 个或多个 N N+
  • 后跟 P: P
  • 关闭括号,以允许我们在NP类型对上进行匹配:)
  • 后跟一个+,以确保至少存在一个 NP 类型对。 (即必须有匹配的东西。
  • 整个表达式都用 w/^ 和 + 括起来,因此它只是 NP 类型对。

如果您希望它不区分大小写,请将regex_constants::icase添加到正则表达式构造函数中。

使用增强正则表达式,^(?:[^NP]*NP)*[^NP]*$应该可以解决问题,我想。 除NP以外的任何事物的序列,后跟NP,尽可能频繁地重复,然后是除NP. 从文本的开头开始,一直持续到结束。 (如果不允许使用除 NP 以外的字符,则 ^(?:NP)*$就是所需要的。

这是使用默认设置(我认为是Perl正则表达式(。

试试这个

 boost::regex const string_matcher("^(NP)*$");