作者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