2017-07-06 7 views
1

私はJavaでregexを使って{}の間のすべての結果を抽出し、一度に1つずつループします。Regexはループ内のfindメソッドを使って一度だけ一致します

これは私が使用しているコードである:

Pattern p = Pattern.compile("(\\{.*})"); 
Matcher m = p.matcher(validatePage); 
while (m.find()) { 
    JSONObject jsonObj = new JSONObject(m.group(1)); 
    System.out.println(jsonObj); 
} 

をこれは私がしかしm個の検索()は一度だけをループさ

<tr><td class='warning'></td><td>[email protected]</td> 
<td>TEST</td><td class='warningMessage'>[WARNING]</td><td 
class='warningMessage'>File with the revision 2016-07-08 validated 
successfully and is ready to be published. Warnings were detected. Please 
see report.</td></tr> 
{"resourceUri":"[email protected]","severity":"WARNING","lineNumber":43,"column":3,"offset":701,"length":118,"message":"extension, version is missing"} 
{"resourceUri":"[email protected]","severity":"WARNING","lineNumber":43,"column":3,"offset":701,"length":118,"message":"extension, release is missing"} 
{"resourceUri":"[email protected]","severity":"WARNING","lineNumber":43,"column":3,"offset":701,"length":118,"message":"extension, correction is missing"} 
{"resourceUri":"[email protected]","severity":"WARNING","lineNumber":50,"column":3,"offset":825,"length":135,"message":"extension, version is missing"} 

を検索していたテキストでは、最初に印刷します結果はうまくいって終了し、なぜ私は理解できません。正規表現マッチャーで実行すると、すべての結果が正しく検出されます。それぞれの結果にマッチさせてループさせる必要がある、私が見逃していることはありますか?

+0

試し '(\\ {。*?})を再生することができません' –

+1

として不要なグループを削除するために(\\{.*?})を使用することができます。コードは4つの一致を見つけます。 [IDEONE](https://ideone.com/0EqFPI)を参照してください。 – Andreas

+0

コードと自分の答えを見直したあとも複製できません。 – Mena

答えて

1

あなたは非欲張り

あなたの正規表現は

Pattern p = Pattern.compile("\\{.*?}"); 
Matcher m = p.matcher(validatePage); 
while (m.find()) { 
    JSONObject jsonObj = new JSONObject(m.group()); 
    System.out.println(jsonObj); 
} 
+0

期待される4つのマッチが異なる行にあるように見え、 '.'は改行にマッチしないので、 1つの検索で。 – Andreas

+0

私はそれをeclipseでテストしました。欲張りなバージョンは、すべての値を1行として取り込みます。推奨されるフェッチの4つのマッチは –

+0

です。 – olliejjc16

関連する問題