2016-10-17 10 views
1

後、私はこのような文字列のJava持っている唯一の2つのブラケットを削除します:それは働いた区切り

String search="between"; 
if(query.toLowerCase().indexOf(search.toLowerCase()) != -1){ 
query=query.replaceAll("[()]",""); 
} 

をしかし、クエリは、いくつかのブラケットが含まれている場合:私が試しの間の後

String query= Select * from table where date between ('2016-05-03' and '2016-05-04') 

私は括弧を削除したいです「あいまい」の前後の単語も削除されます。例:

SELECT column-names 
FROM table-name1 
WHERE value IN (SELECT date 
       FROM table-name2 
       WHERE date between ('2016-05-03' and '2016-05-04')) 

私はただ削除したいE 2つの最初の括弧 'の間という言葉の後にこれを取得する:あなたの助けを

SELECT column-names 
FROM table-name1 
WHERE value IN (SELECT date 
       FROM table-name2 
       WHERE date between '2016-05-03' and '2016-05-04') 

感謝を

+0

可能性のある重複しました。文字列置換(正規表現を使用して)?](http://stackoverflow.com/questions/632204/java-string-replace-using-regular-expressions) –

答えて

1
あなたは、あなたが変更しようとしている正規表現で全体の構造を表すことができ

between\s*\(([^)]*)\) 

$1がへの参照である

between $1 

に変換し大括弧の内容をキャッチするグループ[^)]*

変換は、betweenの後に開いた括弧が続き、最も近い閉じ括弧が削除される場合にのみ発生します。

See it in action !

+0

素晴らしい!それは完璧に動作します、ありがとう! – John

1

あなたは(between後の最初の(を削除し、)の最後に出現する必要があります。つまり、.が改行記号と一致するように、欲望の一致.*をDOTALL修飾子と併用する必要があります。

String s = "SELECT column-names\n FROM table-name1\nWHERE value IN (SELECT date \n    FROM table-name2 \n    WHERE date between ('2016-05-03' and '2016-05-04'))"; 
String search="(?s)(between[^(]*)\\((.*)\\)"; 
System.out.println(s.replaceFirst(search, "$1$2")); 

Java demo

詳細を参照してください:: - 組み込みDOTALLフラグ

  • (?s)また、[^(]*はあなたがいない((betweenの間とで何かをつかむことができます
  • (between[^(]*) - グループ1キャプチャbetweenと0+ (
  • \\(以外の文字 - (
  • (.*)を一致さ - 最後
  • \\)まで、できるだけ多くの任意の0+文字 - リテラル)を。

グループ1の内容への参照、および$2のグループ2の内容への参照。

+0

ニースとシンプル、ありがとう! – John

+0

だから、私は間違っていたと思いますが、あなたの間に '('または ')'があると仮定しましたか? –

1

私はあなたの問題を解決するコードの一部を下回ると思う:[ジャワの

String query= "Select * from table where date between ('2016-05-03' and '2016-05-04')"; 
StringBuilder sbr = new StringBuilder(query); 
sbr.deleteCharAt(sbr.indexOf("(", sbr.indexOf("between"))); 
sbr.deleteCharAt(sbr.indexOf(")", sbr.indexOf("between"))); 
query= sbr.toString(); 
+0

これは非常に良い方法です:)ありがとう! – John