精華區beta RegExp 關於我們 聯絡資訊
前幾天看到一個介紹Regular Expression的網站 內容有提到一個範例 說像是 ab aabb aaabbb aaaabbbb ..... (有多少個a後面就要有多少個b) 這種字串是RE所無法表達的... 說數學上已經證明為不可行? 我也想不出來要怎麼用RE來表達.. 有辦法寫出這種字串的re嗎? thanks!! -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 61.228.96.174
janyfor:請問原PO有數學上的證明嗎? 01/17 18:38
LyinZ:用 pumping lemma 證 http://tinyurl.com/2ly3gx 範例就是 01/17 19:38
LyinZ:但現在常用的 regex lib 和數學上的 regex 並不完全一樣. 01/17 19:39
LyinZ:不過你寫的例子我還是想不出寫法 XD 01/17 19:40
LPH66:就我查資料是表示現行的 lib 裡的語法和數學上的 regex 差別 01/18 02:03
LPH66:僅有 back reference (即 \1 \2 那些東西) 01/18 02:03
LPH66:不過這個例子似乎也找不出有重覆的字串可以用 \1 \2 等表示 01/18 02:03
LPH66:這好像印證了我前幾篇的猜測說加上 back reference 之後 01/18 02:04
LPH66:能表示的東西落在 regular language 和 context-free 之間 01/18 02:04
LPH66:(因為這東西是可以用 context-free 表示出來的) 01/18 02:05
ju22:sorry,我這邊沒證明耶...我在這頁看到的http://0rz.tw/5e5p1 01/18 07:46
springman:前面的 pumping lemma 就是證明了.... 01/19 12:18
> -------------------------------------------------------------------------- < 作者: janyfor (妳哪位ㄚ) 看板: RegExp 標題: Re: [問題] RE無法表達的字串!? 時間: Wed Mar 25 14:22:53 2009 ※ 引述《ju22 (分享)》之銘言: : 前幾天看到一個介紹Regular Expression的網站 : 內容有提到一個範例 : 說像是 : ab : aabb : aaabbb : aaaabbbb : ..... : (有多少個a後面就要有多少個b) : 這種字串是RE所無法表達的... : 說數學上已經證明為不可行? : 我也想不出來要怎麼用RE來表達.. : 有辦法寫出這種字串的re嗎? : thanks!! Pumping lemma Let L be a regular language. Then there exist a const n such for every string w in L such that |w| ≧ n, we can break w into three string, w = xyz, such that : 1. y≠ε 2. |xy| ≦ n 3. For all k ≧ 0, the string xy^kz is also in L L = {a^nb^n | n ≧ 1} w = a^nb^n = xyz x = a^i y = a^j z = a^(n-i-j)b^n (i+j) ≦ n and j ﹥0 k = 0, xy^kz = xy^0z = xz = a^ia^(n-i-j)b^n = a^(n-j)b^n j ≧ 1, (n-j)≠n => xy^0z is not in L -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.117.168.73 ※ 編輯: janyfor 來自: 140.117.168.73 (03/25 14:24) > -------------------------------------------------------------------------- < 作者: evernever (Never) 看板: RegExp 標題: Re: [問題] RE無法表達的字串!? 時間: Thu Oct 8 20:49:44 2009 ※ 引述《ju22 (分享)》之銘言: : 前幾天看到一個介紹Regular Expression的網站 : 內容有提到一個範例 : 說像是 : ab : aabb : aaabbb : aaaabbbb : ..... : (有多少個a後面就要有多少個b) : 這種字串是RE所無法表達的... : 說數學上已經證明為不可行? : 我也想不出來要怎麼用RE來表達.. : 有辦法寫出這種字串的re嗎? : thanks!! 小弟在 PHP 上試出來了...在此跟大家分享 <?php preg_match_all("/^(a(?1)?b)$/","aabb",$matches); print_r($matches); ?> 手邊可以跑 PHP 的大大可以測試一下... ˇ ab ˇ aabb ˇ aaabbb aab abb aaabb . . . 如有 bug 歡迎討論 ... -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 203.158.50.103
LPH66:原來是用了遞迴的 pattern.... 10/09 03:45
LPH66:給不知道的人的連結 10/09 03:46
LPH66:那這樣這系列的語法能表示的字串又多很多了@_@ 10/09 03:47
cutecpu:推樓上給的補充說明 10/09 07:49
bibo9901:推原po和1樓 10/09 13:39
janyfor:真酷~~遞迴很像是硬幹幹出來的 @@" 其他語言有支援嗎?? 10/09 16:33
lg31cm:perl有類似的能力,其他就很難說了 10/11 02:58
lg31cm:問題是這樣炫技的成份大於實用性~ 10/11 02:59