// =====================================================================
//  $Id: regex2.cc,v 1.3 2004/01/29 04:46:40 goiwai Exp $
//  $Name: CLDAQ-1-14-06 $
//  $Log: regex2.cc,v $
//  Revision 1.3  2004/01/29 04:46:40  goiwai
//  TRegularExpressionとTUtillitiesの変更によるものです.
//
//  Revision 1.2  2003/11/27 04:34:53  goiwai
//  *** empty log message ***
//
//  Revision 1.1  2003/11/27 00:10:16  goiwai
//  正規表現を解釈する TRegularExpression の使用例その2
//  サブマッチの取扱いなんかをやってます.
//
// =====================================================================
#include "TRegularExpression.hh"
#include "TBenchmark.hh"
#include "TOption.hh"
#include "TOptionTable.hh"
#include "TArgument.hh"

int main( int argc, char** argv, char** envv )
{
  const Tstring usage =
    "regex2 - Divide filename with dot."
    "\n"
    "Usage: regex2 [FILE]..."
    "\n"
    "\t"
    "% regex2 *";
  TArgument arg( argc, argv, usage );
  if ( arg.GetNumberOfElements() == 0 ) {
    arg.ShowUsage();
  }

  // "." は正規表現では「改行を除く任意の1字」という特別な意味をもつ
  // 文字 としての "." は "\." なので C++ では "\\." となる
  const Tstring pattern = "^(.*)\\.(.*)$";
  Tcout << "PATTERN: \"" << pattern << "\"" << Tendl;
  TRegularExpression regex( pattern );
  for ( Tint i = 0; i < arg.GetNumberOfElements(); i ++ ) {
    Tstring dn = dirname( arg[i] );
    Tstring bn = basename( arg[i] );
    Tcout << "DIR: \"" << dn << "\", ";
    Tcout << "BASE: \"" << bn << "\", ";

    TstringList s = regex.GetSubMatch( bn );
    if ( s.size() != 2 ) {
      Tcout << "\"" << bn << "\" has not dot." << Tendl;
    } else {
      Tcout << "BODY: \"" << s[0] << "\", EXT: \"" << s[1] << "\"" << Tendl;
    }
  }

  return 0;
}
