簡體   English   中英

正則表達式以匹配序列

[英]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");
 }

編輯:根據需求更改以及評論和建議進行更新

^(N+P)+$

這是一些測試

有關正則表達式的進一步閱讀http://www.regular-expressions.info/tutorial.html

對於您修改后的問題,其中NP對由1個或多個N始終跟着單個P組成,則正則表達式為:

^(?:N+P)+$
  • 這是一個不包含括號的括號(?:
  • 后跟1個或多個N's N+
  • 后面跟一個P: P
  • 關閉括號,以使我們能夠匹配NP類型對: )
  • 后面加一個+以確保至少存在一對NP類型對。 (即,必須有一些匹配項。
  • 整個表達式都被w / ^和+包圍,因此只有NP類型對。

而且,如果您希望它不區分大小寫,請將regex_constants::icase添加到regex構造函數中。

我認為,使用boost正則表達式, ^(?:[^NP]*NP)*[^NP]*$應該可以解決問題。 NP以外的任何東西的序列,后跟NP ,並盡可能重復,然后再加上NP以外的任何東西。 從文本的開頭開始,一直持續到結尾。 (如果不允許除NP之外的其他字符,則只需要^(?:NP)*$ 。)

這是使用默認設置的(我認為是Perl正則表達式)。

嘗試這個

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM