test_regexp.cpp
上传用户:yhdzpy8989
上传日期:2007-06-13
资源大小:13604k
文件大小:5k
源码类别:

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: test_regexp.cpp,v $
  4.  * PRODUCTION Revision 1000.1  2004/06/01 19:42:52  gouriano
  5.  * PRODUCTION PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.4
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. /*  $Id: test_regexp.cpp,v 1000.1 2004/06/01 19:42:52 gouriano Exp $
  10.  * ===========================================================================
  11.  *
  12.  *                            PUBLIC DOMAIN NOTICE
  13.  *               National Center for Biotechnology Information
  14.  *
  15.  *  This software/database is a "United States Government Work" under the
  16.  *  terms of the United States Copyright Act.  It was written as part of
  17.  *  the author's official duties as a United States Government employee and
  18.  *  thus cannot be copyrighted.  This software/database is freely available
  19.  *  to the public for use. The National Library of Medicine and the U.S.
  20.  *  Government have not placed any restriction on its use or reproduction.
  21.  *
  22.  *  Although all reasonable efforts have been taken to ensure the accuracy
  23.  *  and reliability of the software and data, the NLM and the U.S.
  24.  *  Government do not and cannot warrant the performance or results that
  25.  *  may be obtained by using this software or data. The NLM and the U.S.
  26.  *  Government disclaim all warranties, express or implied, including
  27.  *  warranties of performance, merchantability or fitness for any particular
  28.  *  purpose.
  29.  *
  30.  *  Please cite the author in any work or product based on this material.
  31.  *
  32.  * ===========================================================================
  33.  *
  34.  * Authors:  Clifford Clausen
  35.  *
  36.  * File Description:
  37.  *   Test program for CRegexp:
  38.  *
  39.  */
  40. #include <ncbi_pch.hpp>
  41. #include <corelib/ncbiapp.hpp>
  42. #include <corelib/ncbienv.hpp>
  43. #include <corelib/ncbiargs.hpp>
  44. #include <util/regexp.hpp>
  45. USING_NCBI_SCOPE;
  46. class CRegexApplication : public CNcbiApplication
  47. {
  48. private:
  49.     virtual void Init(void);
  50.     virtual int  Run(void);
  51.     virtual void Exit(void);
  52. };
  53. void CRegexApplication::Init(void)
  54. {
  55. }
  56. int CRegexApplication::Run(void)
  57. {
  58.     // Simple way to use regular expressions
  59.     CRegexp pattern("D\w*g");
  60.     cout << pattern.GetMatch("The Dodgers play baseball.") << endl;
  61.     
  62.     // Perl compatible regular expression pattern to match
  63.     string pat("(q.*k).*f?x");
  64.     pattern.Set(pat);
  65.     
  66.     // String to find matching pattern in
  67.     string text("The quick brown fox jumped over the lazy dogs.n");
  68.     text += "Now is the time for all good men to come to the aid of their ";
  69.     text += "country.nTwas the night before Christmas and all through the ";
  70.     text += "house, not an creature was stirring, not even a mouse.n";
  71.     
  72.     // Display pattern and sub pattern matches
  73.     cout << pattern.GetMatch(text.c_str()) << endl;
  74.     for (int k = 1; k < pattern.NumFound(); k++) {
  75.         cout << pattern.GetSub(text.c_str(), 1) << endl;
  76.     }    
  77.     
  78.     // Set new pattern and ignore case
  79.     pattern.Set("t\w*e", CRegexp::eCompile_ignore_case);
  80.     
  81.     // Find all matches to pattern
  82.     size_t start = 0;
  83.     while (start != string::npos) {
  84.         string match = pattern.GetMatch(text.c_str(), start);
  85.         if (pattern.NumFound() > 0) {
  86.             cout << match << endl;
  87.             start = text.find(match, start) + 1;            
  88.         } else {
  89.             break;
  90.         }
  91.     }
  92.     
  93.     // Same as above but with cstrings and elinates string return
  94.     start = 0;
  95.     char *txt = new char[text.length() + 1];
  96.     strcpy(txt, text.c_str());
  97.     while (true)
  98.     {
  99.         pattern.GetMatch(txt, start, 0, 0, true);
  100.         if (pattern.NumFound() > 0) {
  101.             const int *rslt = pattern.GetResults(0);
  102.             start = rslt[1];
  103.             for (int i = rslt[0]; i < rslt[1]; i++) {
  104.                 cout << txt[i];
  105.             }
  106.             cout << endl;
  107.         } else {
  108.             break;
  109.         }
  110.     }
  111.     delete[] txt;                  
  112.     return 0;
  113. }
  114. void CRegexApplication::Exit(void)
  115. {
  116.     SetDiagStream(0);
  117. }
  118. /////////////////////////////////////////////////////////////////////////////
  119. //  MAIN
  120. int main(int argc, const char* argv[])
  121. {
  122.     // Execute main application function
  123.     return CRegexApplication().AppMain(argc, argv, 0, eDS_Default, 0);
  124. }
  125. /*
  126.  * ===========================================================================
  127.  * $Log: test_regexp.cpp,v $
  128.  * Revision 1000.1  2004/06/01 19:42:52  gouriano
  129.  * PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.4
  130.  *
  131.  * Revision 1.4  2004/05/17 21:09:26  gorelenk
  132.  * Added include of PCH ncbi_pch.hpp
  133.  *
  134.  * Revision 1.3  2003/06/26 15:37:41  lavr
  135.  * Remove unused variable "len", line 97
  136.  *
  137.  * Revision 1.2  2003/06/20 18:31:51  clausen
  138.  * Switched to work with new CRegexp interface
  139.  *
  140.  * Revision 1.1  2003/06/03 14:51:53  clausen
  141.  * test_regexp.cpp
  142.  *
  143.  * ===========================================================================
  144.  */