0

私はこの表現を使用しようとしています:

Expression:  "\w{1,}\s*?\-\-(\>)?\s*?\w{1,}"

私のコードでは、\ を 2 番目の \ でエスケープしていることに注意してください。

以下の文字列で検索する場合。私は近いと思いますが、葉巻はありません。上記の式が下のテキストで一致を見つけることができるようにしたい. どこが間違っていますか?

Text:        "AB --> CD"
Text:        "AB --> Z"
Text:        "A --> 123d"
etc.

使用したリソース:

  1. http://www.solarix.ru/for_developers/api/regex-en.html

  2. http://www.boost.org/doc/libs/1_47_0/libs/regex/doc/html/boost_regex/introduction_and_overview.html

  3. http://www.regular-expressions.info/reference.html


アップデート

コメント助かりました。記録保持の目的で、正規表現の習得に役立った正規表現サイトを私のスレッドに投稿してくれる人を今でも見たいと思っています。とにかく、私のコード (主にブースト Web サイトからコピーされたもの) は.

/* All captures from a regular expression */
#include <boost/regex.hpp>
#include <iostream>

/* Compiled with g++ -o regex_tut -lboost_regex -Wall ./regex_tut.cpp */

void print_captures(const std::string& regx, const std::string& text)
{
   boost::regex e(regx);
   boost::smatch what;
   std::cout << "Expression:  \"" << regx << "\"\n";
   std::cout << "Text:        \"" << text << "\"\n";
   if(boost::regex_match(text, what, e, boost::match_extra))
   {
      unsigned i;
      std::cout << "** Match found **\n   Sub-Expressions:\n";
      for(i = 0; i < what.size(); ++i) {
         std::cout << "      $" << i << " = \"" << what[i] << "\"\n";
      }
   }
   else
   {
      std::cout << "** No Match found **\n";
   }
}

int main(int argc, char* argv[ ])
{
   print_captures("^\\w+\\s*-->?\\s*\\w+\\s*(\\(\\d+\\))?", "AB --> CD (12)" );
   return 0;
}

うまくいくようです。ただし、お気に入りのサイトへの回答投稿を受け入れて、初心者にいくつかのポインターを提供できるようにしてください =)。

4

1 に答える 1

1

私があなたの質問を正しく理解したかどうかはわかりませんが、たとえば正規表現を一致させたい場合はAB、次の正規表現を使用できます。CD"AB --> CD"

Expression:  "(\w+)\s*-->?\s*(\w+)"
于 2011-08-12T05:09:57.247 に答える