On Tue, Feb 28, 2006 at 08:49:25PM +0900, rofiq wrote: > kalo masalah yg roni kasih kaya'nya mentok deh pake regex, harus main > ke grammar. udah dicoba pake xml parser dia mau tuh terima, tapi kalo > diliat dalemnya diubah jadi > (pake regex lain lagi?)
Wah, jadi tertantang, hehe. Gak mentok lah. Selama dia regular pasti bisa diekspresikan dengan regular expression (hence the name), context-free grammar juga ekuivalen kok dengan regex (kalo saya gak salah inget dr kelas automata kira2 7 th lalu). Kalo mentok gak bisa dibikin parser dong, hehe. (CMIIW, I'm not that good in automata theory.) Mari kita bedah pelan2 dari grammarnya dulu (bastardized BNF+PCRE, hehehe, mudah2an masih bisa dimengerti), ini simplenya aja yg HTML (bukan XHTML) dulu: <HTMLTAG> ::= <LT> <SPACE>* <TAG> (<SPACE>+ <ATTR>)* <SPACE>* <GT> <LT> ::= < <TAG> ::= <WORDCHAR>+ <ATTR> ::= <ATTRNAME> <SPACE>* = <SPACE>* <ATTRVAL> <GT> ::= > <WORDCHAR> ::= [a-z] <ATTRNAME> ::= <NONWORDCHAR>+ <ATTRVAL> ::= "<VALCHAR>*" <VALCHAR> ::= [^"] <SPACE> ::= \s Disclaimer: ini sangat sangat sederhana, mungkin banyak mengabaikan bbrp hal yg kurang umum (dan juga multiline, case sensitivity, dsb), dan mungkin tidak conform ke HTML spec. Nah tinggal diterjemahin balik aja ke regex utk masing2 elemennya dr grammar di atas utk <HTMLTAG>: /<\s*[a-z]+(\s+[a-z]+\s*=\s*"[^"]*")*\s*>/ Disclaimer: untested. Ronny PS. BNF: http://en.wikipedia.org/wiki/Backus-Naur_form
signature.asc
Description: Digital signature