[英]Regular expression for odd number of a's
我在解決以下練習時遇到問題,我會感激任何幫助。
設Σ= {a,b}。 我需要為包含奇數a的所有字符串提供正則表達式。
感謝您的時間
b*(ab*ab*)*ab*
它的主要部分是(ab*ab*)*
,它列舉了偶數a
s的所有可能性。 然后最后,必須存在額外的a
才能使它變得奇怪。
注意這個正則表達式相當於:
b*a(b*ab*a)*b*
這兩個結構是由抽取引理定義的形式:
http://en.wikipedia.org/wiki/Pumping_lemma
更新:
@MahanteshMAmbi表達了他對正則表達式匹配案例aaabaaa
。 事實上,它沒有。 如果我們運行grep
,我們將清楚地看到匹配的內容。
$ echo aaabaaa | grep -P -o 'b*(ab*ab*)*ab*'
aaabaa
a
-o
選項grep
將每行打印每個匹配的實例。 在這種情況下,正如我們所看到的,正則表達式被匹配兩次。 之一匹配5 a
S,一個匹配1 a
。 下面我的評論中的看似錯誤是由不正確的測試用例引起的,而不是正則表達式中的錯誤引起的。
如果我們想在現實生活中使用它,那么在表達式中使用錨點來強制完整的字符串匹配可能更好:
^b*(ab*ab*)*ab*$
因此:
$ echo aaabaaa | grep -P -q '^b*(ab*ab*)*ab*$'
$ echo $?
1
^[^a]*a(?=[^a]*(?:a[^a]*a)*[^a]*$).*$
這會發現只有奇數的a's
任何通用string.See演示。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.