うまくいえば、これは短いです。質問以下のプログラムでは、3つのセットが垂直に整列した "pad.txt"という名前のメモ帳の文書からすべてのデータを正常に抽出しました「ID」の後に「名前」と「日付結合」が続き、そのパターンは一貫しています。.txtファイルからすべての日付を抽出する
は、メモ帳のドキュメントはこれをもっぱら構成されています でした1 名:ボブ 加入した日付:2014年1月12日 ID:2 名前:ジム・ 日付登録日:1993年8月21日 ID:3 名前:参加スティーブ 日:1-2の数字、スラッシュ、1-2の数字を再度、スラッシュ、そして2:2016年6月7日
私はまた、許容可能な日付形式を受け入れ、正規表現を定義していますYEAR日付の4桁。最初にワイルドカード文字 "。"を指定しました。 < - 日付が受理される前に、任意の文字の任意の数を言うだけでなく、私も、指定した日付の後にする欲張りな量指定子「」スター付きドット、
と私の主な目標「は。」このコードはONLY EXTRACT pad.txtファイル内のすべての日付、および文字列か何かでそれらを格納することです。..
パブリッククラスメイン{
public static void main(String args[]) throws Exception{
StringBuilder builder = new StringBuilder();
FileReader reader = new FileReader(new File("pad.txt"));
// Define valid date format via regex
String dateRegex = ".* (\\d{1,2})/(\\d{1,2})/(\\d{2,4}) .* ";
int fileContent = 0;
// iterate through entire notepad doc, until = 0 AKA (finished searching doc)
while((fileContent = reader.read()) !=-1){
builder.append((char)fileContent);
}//encapsulating loop
reader.close();
String extracted = builder.toString();
System.out.println("Extracted: " + extracted);
System.out.println();
Matcher m = null;
// Validate that file contents conform with 'dateRegex'
m = Pattern.compile(dateRegex).matcher(extracted);
if(m.find()){
System.out.println("Entire group : " + m.group());
}
}
}
残念ながら、m.group() ;"グループ全体:6/07/2016" 前述のように、私の目標はすべての日付を抽出することですが、.matcherコールでのみ「全体グループ:6/07/2016 " 私の心の中では、日付の前と後に任意の量の文字が許されているので、一番下までスクロールして、最後の日付のみを見つけます。正規表現をそれは、最後のものだけでなく、すべての日付を引き出し、なぜ最後のものを引っ張っているのですか?
私はこれで執拗に試してみたとまあ、それは比較的簡単ですか...事前
AH!それは簡単なことでしたが、.groupの実装がやや間違っていなければならないことを知っていました。これで、私はさらに正規表現の理解を進歩させました:) – Keith