作者charleshu (Analog Engineer)
看板RegExp
標題Re: [問題] 類似SQL的Parser
時間Sat May 22 16:56:04 2010
※ 引述《Geniusking (真理斯金)》之銘言:
: 我的String是一個像SQL的Query,有sub select:
: select A, B from Table where city in
: ( select id from Table where name in
: ( select name from Table where id=J ))
: 現在用
: preg_match("/SELECT (.+) FROM (.+) WHERE (.+) IN \([\s]*(.+)\)$/i", $q, $m)
: Match的結果是(找到第二個from了):
: 請問要怎麼做才好?謝謝
Regular express 沒有完整的 state 功能, 並不適合作完整的 Parser,
如果你需要作 SQL Parser, 應該用正規的 Parser builder 如 Yacc, bison, ANTLR 或自己寫 Recursive Parser.
Lex & Yacc 2nd 有SQL Parser 的範例, 台灣 Oreilly 有出中文版, 翻譯的不錯.
--
Do not depend on others without effort...
當我年輕時,請教別人問題時常聽到上面那句話. 當時心裏偶而會有些小小抱怨.
當時間過去,我偶而會想到上面那句話, 心中十分感謝當初告訴我那句話的人.
當發現問題時,最有價值的不是問題的答案,
而是找到解決的方向,並在努力的過程裡具備解決問題的能力.
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 203.73.242.205
1F:推 Geniusking:謝啦,php的PEAR中也有SQL_Parser也可以用 05/23 09:14