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

Attachment: signature.asc
Description: Digital signature

Kirim email ke