[英]Regular Expression to match a sequence
我想要一個重組表達式來匹配一個序列。 我希望正則表達式匹配的順序是NP,因此要確保從字符串開始一直到N之后有一個P,而在P之前有一個N
1)NPNPNPNP =正確
2)NPNPPNP =不正確
抱歉,我想從3RD比賽的問題中減去一個以上的部分
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");
}
對於您修改后的問題,其中NP對由1個或多個N始終跟着單個P組成,則正則表達式為:
^(?:N+P)+$
(?:
N+
P
)
+
以確保至少存在一對NP類型對。 (即,必須有一些匹配項。 而且,如果您希望它不區分大小寫,請將regex_constants::icase
添加到regex構造函數中。
我認為,使用boost正則表達式, ^(?:[^NP]*NP)*[^NP]*$
應該可以解決問題。 N
或P
以外的任何東西的序列,后跟NP
,並盡可能重復,然后再加上N
或P
以外的任何東西。 從文本的開頭開始,一直持續到結尾。 (如果不允許除N
和P
之外的其他字符,則只需要^(?:NP)*$
。)
這是使用默認設置的(我認為是Perl正則表達式)。
嘗試這個
boost::regex const string_matcher("^(NP)*$");
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.