用于匹配序列的正则表达式
Regular Expression to match a sequence
我想要一个与序列匹配的地理表达式。我希望正则表达式匹配的序列是 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]*$
应该可以解决问题,我想。 除N
或P
以外的任何事物的序列,后跟NP
,尽可能频繁地重复,然后是除N
或P
. 从文本的开头开始,一直持续到结束。 (如果不允许使用除 N
和 P
以外的字符,则 ^(?:NP)*$
就是所需要的。
这是使用默认设置(我认为是Perl正则表达式(。
试试这个
boost::regex const string_matcher("^(NP)*$");
相关文章:
- 标准库中的任何正则表达式语法是否支持 (?(定义)用于子模式参考?
- 适用于 gcc 4.8 的任何正则表达式库
- C++ 中用于搜索字符串模式的正则表达式
- 正则表达式,用于类似 python 的函数参数解析
- 提升正则表达式 cpp 用于查找 %% 之间的字符串,输出不包括 % 字符本身
- 用于匹配多个组的正则表达式
- 用于解析 xrandr 响应的正则表达式
- #include < regex.h> 用于创建正确正则表达式的问题
- 用于匹配字母数字的可移植正则表达式
- 用于获取函数签名的 C++ 正则表达式
- 用于提取[]之间内容的正则表达式
- 将 C++11 正则表达式与 gcc 4.8.2 一起使用时会出现奇怪的结果(但适用于 Boost 正则表达式)
- 正则表达式适用于 Linux,但不适用于 Solaris
- C++11 正则表达式是否适用于 UTF-8 字符串
- C++用于解析正则表达式的库
- 用于分析数据的正则表达式
- 用于查找函数的正则表达式
- 用于匹配 C++ 范围字符串文本的正则表达式 (L "..." )
- 用于匹配序列的正则表达式
- Qt / QRegExp 正则表达式用于括号和新行或"r"?