2009-08-05 12 views
1

私は正規表現を使用した「バー」を抽出したいと思います。正規表現初心者の質問

ヘルプ!

+0

は、私はあなたが一致したいしている文字のクラスがどのような明確にする必要があると思う - あなたは任意の文字を抽出するために探していますかっこ内に?最初の文字が大文字のBで、文字列の後ろに閉じ括弧の前に文字が続く文字列?この質問にはおそらく無限の答えがあります。 –

+1

Plzがコードを送信する –

答えて

5
/.*\((.*)\)/ 

最初は。*、括弧の前に2番目のものと一致します。*(撮影中に)の括弧内は何も一致し、あなたのためにそれを返します。

は(私はあなたの例のテキスト内の引用符は、あなたが一致したいしている文字列の実際の一部ではなかったと仮定。)は、ネストされた括弧がない場合

2

(?<=\().*?(?=\)) 
+0

これは少しOTTであると分かりますが、OPが何を望んでいるかによって異なりますが、彼が言ったことがほしいと思うなら、これは必要ではありません。 – Salgar

+0

「Foo」と「Bar」が参照されるとき、OPは通常、「Bar」を探す方法ではなく、一般的な解決策を求めています。 –

+0

私はそれを認識しますが、Davの答えは十分であり、正規表現の専門家ではない一般的なプログラミング人口のより大きな割合で読みやすくなります。 – Salgar

1

だけを検索します"バー"。

Groovyでたとえば:

if("Foo(Bar)" =~ /Bar/) { 
    println "match" 
} 

'一致' を出力します

+0

私は、FooとBarはプレースホルダーのテキストであると仮定していたと思います。 – Amber

+0

私はそれについて考えてみると本当に明確な質問ではない –

+0

個人的には、これは正規表現を使って "Foo(Bar)"という文字列の中に "Bar"とマッチした "Bar"という質問に対する最良の答えだと思います。 –

1

は十分なはずです:

\(.*\) 

は、Javaのコードは次のようになります。

String foo = "Foo(Bar)"; 
    Pattern pattern = Pattern.compile("\(.*\)"); 
    Matcher matcher = pattern.matcher(foo); 
    while (matcher.find()) { 
      int beginIndex=matcher.start(); 
      int endIndex=matcher.end(); 
      return foo.substring(beginIndex, endIndex); 
0

あなたはかなりの情報:プラットフォームや言語が使用されておらず、受け取ったテキストの種類に関する兆候がない"Foo"は静的か、それとも変更できますか? 「バー」は静的ですか?等。)。

ルビーピッキングと「foo」が安定していると仮定して、あなたはこれを行うことができます。

$ ruby -e 'p "Foo(Bar)"[/Foo\(([^)]*)\)/, 1]' 
"Bar" 
$ 
+0

@Robert - np :) –