2010-08-23 2 views
0

J'ai ORDER BY partie de la déclaration et je dois le diviser au niveau des parties logiquesdivision: regex d'ignorer l'intérieur délimiteurs entre parenthèses équilibrée

my $sql_part = <<EOH 
    IF(some_table.some_field <> 3, 1, 0), 
    some_table.other_field, 
    CASE other_table.third_field WHEN IS NULL THEN 2 ELSE 1 END, 
    other_table.third_field 
EOH 

et, vous le savez, chaîne d'origine ne contient pas des sauts de ligne et les IF peuvent être imbriqués. Le problème est que je ne veux pas diviser le contenu à l'intérieur des IF imbriqués, appels de fonction.

Si simple split /\s*,\s*/, $sql_part ne fonctionnera pas.

Existe-t-il une regex qui peut faire cela, ou devrais-je le faire différemment?

Répondre

3

Il y a une expression régulière, mais vous voulez probablement utiliser juste un parseur SQL: SQL::Statement

+0

Pour le bénéfice des moteurs de recherche: lorsqu'un analyseur spécialisé comme dans la réponse donnée est d'aucune utilité, [ 'Data :: Record'] (http://p3rl.org/Data::Record) fera le travail. – daxim

Questions connexes