2016-11-30 17 views
0

私は正規表現を使って文字列から数値アドレスを解析しようとしています。数値アドレスを解析する

これまでのところ、文字列http://63.88.73.26:80/から数値アドレス(部分的に)63.88.73.26:80を取得できました。しかし、私は80 /を飛ばしようとしていて、運がなかった。

私がこれまでにしようとしていることは次のとおりです。しかし、まだ含まれない

Pattern.compile("[0-999].*[0-999][\\p{Digit}]", Pattern.DOTALL); 

:80

私は私がここで行方不明です何を知らない、私は時の\ P {数字}をチェックしようとしています終わりですが、どちらもあまり効果がありません

ありがとうございます!

+0

句読点でトークン化してからエントリを処理しないのはなぜですか? – duffymo

+0

'。*'はコロンを消費しています。 '' [0-9 \\。] * "'を使うことをお勧めします。 – RamenChef

+0

本当に正規表現にする必要はありますか? JavaはURLクラスを提供します。 '63.88.73.26'部分を取得するには、' new URL( "http://63.88.73.26:80/").getHost() 'のように使用できます。 – Pshemo

答えて

1

あなたはを先読みしています。(?=...)です。これは、特定の式が後に続く場合にのみ一致します。の正の先はのかっこです。それは最も単純な形式だで、あなたが適切に形成されたアドレスを持っていることを確認するために、より完全なものと[0-9\.]+一部(マッチ1桁以上またはフルストップ)を変更したい場合がありますが、あなたは

[0-9\.]+(?=:[0-9]{0,4}) 

を持つことができ

それが動作するまで、あなたはあなたの心のコンテンツにあなたの表現をいじることができる場所regexr.comをチェックアウト... PshemoはURLgetHost()で正しいアプローチを示し

1

注:

該当する場合、このURLのホスト名を取得します。ホストのフォーマットはRFC2732に準拠しており、すなわちリテラルIPv6アドレスの場合、このメソッドは角括弧('['および']')で囲まれたIPv6アドレスを返します。

したがって、それはここで、適切なツールを使用するのが最善です:

import java.net.*; 
.... 
String str = new URL("http:" + "//63.88.73.26:80/").getHost(); 
System.out.println(str); // => 63.88.73.26 

は、あなたがそうのはあなたのパターンを検査してみましょう、あなたは正規表現を勉強したいことを言及Java demo

を参照してください。

  • [0-999] - 任意の1桁の1桁に一致します(0-9は、に一致する範囲を作成します).. 9、二つ9 Sは冗長であり、除去することができる)
  • .* - 貪欲、すなわち最後までの任意の0+文字、...
  • [0-999] - (上記の任意の1桁を参照)
  • [\\p{Digit}] - あなたは数字で2つの連続した数字の最後に出現するまでの始まる文字列と一致し、意味の任意のUnicode桁

数字とドットのシーケンスが必要です。このような文字列を抽出するには複数の方法があります。一緒にあなたが必要とするどのように多く出現して正確な文字仕様に詳細なパターンを使用して

  1. [0-9]{1,3}(?:\.[0-9]{1,3}){3}(全体の一致 - matcher.group()は - 必要な値を保持しています)。
  2. "brute-force"文字クラスアプローチ(Jonathan's answerを参照)を使用していますが、先読みの代わりにキャプチャグループを使用し、文字クラス内でリテラルドットとして扱われるためエスケープされていないドットを使用します。 ([0-9.]+):[0-9](今、値がmatcher.group(1)である)
  3. 「空想」は、「get-文字列の間に-2-の文字列」アプローチ:http://::/以外のすべてのテキストをグループに取り込まれなければならない - https?://([^:/]+):(再び値はmatcher.group(1)になります)

いくつかのサンプルコード(アプローチ#1):

Pattern ptrn = Pattern.compile("[0-9]{1,3}(?:\\.[0-9]{1,3}){3}"); 
Matcher matcher = ptrn.matcher("http://63.88.73.26:80/"); 
if (matcher.find()) { 
    System.out.println(matcher.group()); 
} 

必読:Character Classes or Character Sets

関連する問題