私は次の部分でSQLクエリを持っています...
BRANCH ='Chennai' AND $ ACCOUNT_NO = '12312321'
これでは、$をすでに定義したPL / SQL関数に置き換えたいので、出力を次のようにする必要があります。
BRANCH ='Chennai' AND decode_acc_no(ACCOUNT_NO)= '12312321'
必要な出力を取得するために文字列で使用する必要がある正規表現は何ですか??..
これを使って:
query.replace("\\$([A-Za-z0-9_]*)", "decode_acc_no($1)");
このようなものが動作するはずです:
String str = "BRANCH='Chennai' AND $ACCOUNT_NO='12312321'";
String newStr = str.replaceAll("^(.+?)\\$([A-Z_]+)(.*)$", "$1decode_acc_no($2)$3");
System.out.println(str);
System.out.println(newStr);
版画:
BRANCH='チェンナイ' AND $ACCOUNT_NO='12312321'
BRANCH='チェンナイ' AND decode_acc_no(ACCOUNT_NO)='12312321'
編集:あなたのコメントによると、いいえ、これはあなたが質問で与えた構造とのみ一致します。より柔軟性が必要な場合は、これを使用できます。\\$(A-Z_]+)
String str = "BRANCH='Chennai' AND $ACCOUNT_NO='12312321' OR $BENIFICIARY_ACC_NO='2323434'"
String newStr = str.replaceAll("\\$([A-Z_]+)", "decode_acc_no($1)");
System.out.println(newStr);
以下を出力します。
BRANCH='チェンナイ' AND decode_acc_no(ACCOUNT_NO)='12312321' OR decode_acc_no(BENIFICIARY_ACC_NO)='2323434'
簡単なハックは
String original = "BRANCH='Chennai' AND $ACCOUNT_NO='12312321'"; System.out.println(original.replace("' AND $ACCOUNT_NO", "' AND decode_acc_no(ACCOUNT_NO)"));
正規表現 s/\$([A-Za-z_]*)/decode_acc_no(\1)/g を使用することもできます
String in = "BRANCH='Chennai' AND $ACCOUNT_NO='12312321'";
String result = in.replaceAll("\\$([^=]+)", "decode_acc_no($1)");
出力:
BRANCH='チェンナイ' AND decode_acc_no(ACCOUNT_NO)='12312321'
正規表現は文字を\\$([^=]+)
検索し、. 以外$
のすべてのものに一致し=
ます。これは、最初のキャプチャ グループに格納されます。そのキャプチャ グループのコンテンツは、 を使用して置換文字列で再利用され$1
ます。
すべてのプログラマーが正規表現について絶対に知っておくべきこと
免責事項: 私自身のブログ投稿