擅长:python、mysql、java
<p>虽然regex可能不是<em>右侧的</em>工具,但您仍然可以使用它。</p>
<pre><code>>>> statements = """
... DROP TABLE IF EXISTS `tableA`;
...
... CREATE TABLE `tableA`(
... some_code
... ) ENGINE=MyISAM DEFAULT CHARSET=latin1;
...
... DROP TABLE IF EXISTS `tableB`;
...
... CREATE TABLE `tableB`(
... some_code
... ) ENGINE=MyISAM DEFAULT CHARSET=latin1;
...
... DROP TABLE IF EXISTS `tableC`;
...
... CREATE TABLE `tableC`(
... some_code
... ) ENGINE=MyISAM DEFAULT CHARSET=latin1;
... """
>>> regex = r"((?:CREATE|DROP) TABLE (?:IF (?:NOT )?EXISTS )?`tableB`(?:[^;]|(?:'.*?'))*;)"
>>> re.findall(regex, statements, re.I)
['DROP TABLE IF EXISTS `tableB`;', 'CREATE TABLE `tableB`(\nsome_code\n) ENGINE=MyISAM DEFAULT CHARSET=latin1;']
>>>
</code></pre>
<p>如果你想知道</p>
<pre><code>`(?:[^;]|(?:'.*?'))*`
</code></pre>
<p>是,它只用于匹配除<code>;</code>以外的任何字符,任何次数,包括无</p>
<p><strong>或</strong></p>
<p>字符串文本,这意味着它将允许<code>;</code>在类似<code>'this is a ;value; for a varchar field'</code>的字符串内匹配。</p>