(端口,原型,名称,加密)VALUES(47001,‘TCP’,‘WinRM’,0)“);$ this-&gt; addSql(“INSERT INTO PortsList(Port,Proto,Name,Encrypted)VALUES(47808,‘UDP’,‘ BACnet的 </跨度> ’,0)“);$ this-&gt; addSql(“INSERT INTO
你可以试试 cut :
cut
cut -d '"' -f2 file.sql INSERT INTO PortsList (Port, Proto, Name, Encrypted) VALUES (45824, 'TCP', 'DAI ', 0) INSERT INTO PortsList (Port, Proto, Name, Encrypted) VALUES (47001, 'TCP', 'WinRM', 0) INSERT INTO PortsList (Port, Proto, Name, Encrypted) VALUES (47808, 'UDP', 'BACnet', 0) INSERT INTO PortsList (Port, Proto, Name, Encrypted) VALUES (48653, 'TCP', 'Robot', 0) INSERT INTO PortsList (Port, Proto, Name, Encrypted) VALUES (48653, 'UDP', 'Robot', 0) INSERT INTO PortsList (Port, Proto, Name, Encrypted) VALUES (49151, 'TCP', 'Reserved', 0)
或者在PHP中,您可以使用正则表达式
"(.*)"
这会将字符串作为一组返回。 在这里进行测试
编辑:对于那些不想关注链接的人,这里是PHP的实现。
$re = "/\"(.*)\"/"; $str = "\$this->addSql(\"INSERT INTO PortsList (Port, Proto, Name, Encrypted) VALUES (45824, 'TCP', 'DAI ', 0)\")"; preg_match_all($re, $str, $matches);
您可以执行它,而不是解析它。
如果你把它包装在一段输出它的代码中(到屏幕,文件,到任何......),你可以随心所欲地捕获所有的查询。如果sql字符串也可能包含变量或转义字符,则此功能尤其有用。这会使解析变得更难,但如果您只是执行代码,PHP将为您完成艰苦的工作。
class Output { function addSql($sql) { echo "$sql\n"; } function output() { // Paste that code of yours here } } $x = new Output(); $x->output();
这可能有效,但只适用于sql行。 替换为空字符串。
'~(?m)(?:^[^"\r\n]*\(\h*"\h*|\h*"\h*\)[^"()\r\n]*$)~'
格式:
(?m) # Multi-line mode (?: ^ # BOL [^"\r\n]* \( \h* " \h* | # or, \h* " \h* \) [^"()\r\n]* $ # EOL )