2013-03-28 6 views
0

Salut J'ai un code SQL que j'essaye d'analyser et d'extraire du texte.extrait regex sous-chaîne

CREATE OR REPLACE VIEW the_view_name as 

Je veux que le texte entre REPLACE VIEW et la AS qui ne comprend pas d'espaces avant ou arrière.

Pour l'instant, je reçois le lot avec /REPLACE\s*VIEW(.*?)\s*AS/gi.

Merci

Répondre

3

Essayez de faire ceci:

echo 'CREATE OR REPLACE VIEW the_view_name as' | 
    perl -lne '/replace\s+view\s+(.*?)\s+as\b/i && print "[$1]"' 
[the_view_name] 

Vous pouvez utiliser cette regex aussi dans votre cas:

/replace\s+view\s+(\S+)\s+as\b/i 

Voir perldoc perlrebackslash

\S : Character class for non whitespace 
+0

$ sqlline = ~ /replace\s+view\s+(.*?)\s+as \bi; $ viewname = $ 1; print "viewname: $ viewname \ n"; – jaybee

+0

Wut? Que voulez-vous dire ? –

+1

tout est bon; C'est ce que j'ai fini par utiliser. J'avais juste besoin du $ 1 – jaybee

0

Vous êtes actuellement manque un espace après VIEW, et si vous voulez tout sauf des espaces, votre groupe de capture devrait être ([^\s]*), qui va tout gagner jusqu'à jusqu'à ce qu'un espace.

+0

Merci, REPLACE \ s * VIEW \ s * ([^ \ s] *) me donne REPLACE VIEW the_view_name Je suis toujours après seulement 'the_view_name' – jaybee