[英]Regex accepting string that meets “('a'*N - 'b'*M)%3 = 0” requirement
為了進一步研究這個主題,我一直試圖寫一個正則表達式:“來自{a,b}的字母表只有在'a'出現'減'出現'b'時才能接受該字符串可以除以3。” 有人可以幫我處理這件事嗎? 我知道我應該提供自己的任何意見來幫助解決這個問題,但我不知道任何線索。
也許只是它可能應該以(aaa)作為基礎開始然后隨着'a'和'b'的下一個“對”進一步擴展,但我不知道如何使其擴展像“(aaa)aaabbb”而不是像“( AAA)ABABAB”。
使用有限狀態自動機最容易表示基於計數的正則表達式問題,並將其減少為單個模式。
有三個節點,每個模塊值一個; 將a轉換定義為處理a
或b
時模塊化值的變化。
然后通過單個轉換替換節點中的每個路徑來折疊一個節點。
0->2->0
→ 0->0
( ba
) 0->2->1
→ 0->1
( bb
) 1->2->0
→ 1->0
( aa
) 1->2->1
→ 1->1
( ab
) 重復另一個節點。
0->1(->1)*->0
→ 0->0
( (a|bb)(ab)*(b|aa)
) 最終的模式是: (ba|(a|bb)(ab)*(b|aa))*
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.