2016-11-21 8 views
-5

javaの正規表現を使用してjsonオブジェクトから文字列を抽出しようとしています。Javaの正規表現が一致しません

文字列は次のようになります。

{"key":"value"} 

正規表現メソッドのコードは次のようになります。

public String extractVal(String dataRaw) { 
    Pattern p = Pattern.compile(":\"(.+\b)"); 
    Matcher m = p.matcher(dataRaw); //dataRaw is string from above^ 
    if (m.matches()) { 
     return m.group(1); 
    } 
    return null; 
} 

それは常にちょうどnullを返します。私は何を間違えたのですか?事前

+4

単に私がjava'でregexsを使用してJSONオブジェクトから文字列を抽出する必要が –

+1

'jsonparserか何かを使用していない理由は...いいえ、あなたは、代わりにJSONパーサーを使用しないでください。 –

+0

私はJSONパーサーが何であるかを知っている、それは私が尋ねたものではないのです。 – Plays2

答えて

3

はあなたのコードには2つの問題がありますが

  1. \bはする必要があります。最初は、指定した文字列で検索を行うと、それが正規表現に一致する部分文字列を見つけたときに停止します。 2番目の文字列全体を検索します。提供正規表現は、完全な文字列と一致しないので、matches()は動作しません。

これらの2点でコードを修正するだけで問題ありません。自分自身をテストしました。

0


おかげで、私はしかし、めちゃくちゃ何

public String extractVal(String dataRaw) { 
    String re1=".*?"; // Non-greedy match on filler 
    String re2="(?:[a-z][a-z]+)"; // Uninteresting: word 
    String re3=".*?"; // Non-greedy match on filler 
    String re4="((?:[a-z][a-z]+))"; // Word 1 
    Pattern patt = Pattern.compile(re1+re2+re3+re4,Pattern.CASE_INSENSITIVE | Pattern.DOTALL); 
    Matcher matc = patt.matcher(dataRaw); 
    if (matc.find()) { 
     return matc.group(1); 
    } 
    return null; 
} 

をtext2re.com使用して答えはまだ不明な点が見つかりました。

EDIT:よりよい解決策:あなたはfind()ではなくmatches()を使用する必要があります\\b

  • public String extractVal(String dataRaw) { 
        String test = ".+:\"(.+)\""; 
        Pattern patt = Pattern.compile(test,Pattern.CASE_INSENSITIVE | Pattern.DOTALL); 
        Matcher matc = patt.matcher(dataRaw); 
        if (matc.find()) { 
         return matc.group(1); 
        } 
        return null; 
    } 
    
  • 関連する問題