2016-09-24 16 views
0

私は"<name><address> and <Phone_1>"のような文字列を持っています。私は正規表現一致で "<"を除外する方法

1) <name> 
2) <address> 
3) <Phone_1> 

のように、私は正規表現使用して試してみました結果を得るために取得「<を(。*)>」を持っているが、それはただ一つの結果を返します。

+0

どのような言語ですか...? –

+0

こんにちは@Andy ..それはJavaにあります – DevX

答えて

1

したい正規表現は、あなたが3つのキャプチャグループにしたいものを吐き出すます

<([^<>]+?)><([^<>]+?)> and <([^<>]+?)> 

です。

Matcher m = Pattern.compile("<([^<>]+?)><([^<>]+?)> and <([^<>]+?)>").matcher(string); 

if (m.find()) { 
    String name = m.group(1); 
    String address = m.group(2); 
    String phone = m.group(3); 
} 
1

正規表現でパターン.*貪欲です:完全なコードは次のようになります。見つかった最初の<とできるだけ多くの文字が一致し、最後に可能な文字は>と一致します。あなたの文字列の場合は、最初に<が見つかり、できるだけ多くのテキストを>まで探します。これは文字列の最後にあります。

欲求がないまたは「怠惰な」パターンは、可能な限り少数の文字と一致します。単に<(.+?)>。疑問符は非欲張りの構文です。 this questionも参照してください。

1

これは、動的なグループ数がある場合に機能します。

Pattern p = Pattern.compile("(<\\w+>)"); 
Matcher m = p.matcher("<name><address> and <Phone_1>"); 
while (m.find()) { 
    System.out.println(m.group()); 
} 
関連する問題