簡體   English   中英

奇數a的正則表達式

[英]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演示。

https://regex101.com/r/eS7gD7/22

暫無
暫無

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

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