0

何千ものSQLクエリをフォーマットするには、引用符のペアにないすべての文字を大文字に変換する必要があります。

例えば:

select * from region where regionkey = 'America'

に変換されます

SELECT * FROM REGION WHERE REGIONKEY = 'America'

perlを使用すると、引用符で囲まれた文字を大文字に変換できます。

perl -p -e 's/('.+?')/\U\1/g'

そして取得:

select * from region where regionkey = 'AMERICA'

問題は、キャプチャ結果を「逆」にして、たとえば引用符で囲まないように行進する方法です。

4

2 に答える 2

1
s/([^']*)('[^']*'|\z)/\U$1\E$2/g

それで

perl -pe's/([^'\'']*)('\''[^'\'']*'\''|\z)/\U$1\E$2/g'

ysthは、引用符を組み合わせたアプローチを提案しています。

perl -pe"s/([^']*)('[^']*'|\z)/"'\U$1\E$2/g'

引用符にバックスラッシュエスケープを含めることができる場合は、変更します

'[^']*'

'(?:[^'\\]+|\\.)*'
于 2013-03-04T04:17:33.257 に答える
0

引用符で囲まれた部分文字列で文字列を分割し、1つおきに大文字にします。このような

my $str = "select * from region where regionkey = 'America'";

my $uc;
$str = join '', map { ($uc = !$uc) ? uc : $_ } split /('[^']*')/, $str;
print $str;

出力

SELECT * FROM REGION WHERE REGIONKEY = 'America'
于 2013-03-04T04:49:35.363 に答える