2011-01-28 20 views
4

私は検索しましたが、何も見つかりませんでした。私の時間を無駄にしないように、答えが他の人には明らかであるという機会に、私はここで尋ねています。これまで有用だったサイトはhttp://softwareramblings.com/2008/07/regular-expressions-in-c.htmlですが、サンプルは非常に単純すぎます。C++正規表現で句読点のない単語に一致させる

一部
言葉
そして
一部
句読点

ありがとう:私は2010年

#include <regex> 

[...] 

string seq = "Some words. And... some punctuation."; 
regex rgx("\w"); 

smatch result; 
regex_search(seq, result, rgx); 

for(size_t i=0; i<result.size(); ++i){ 
    cout << result[i] << endl; 
} 

の予想される出力は次のようになりVisual Studioを使用しています。

string seq = "Some words. And... some punctuation."; 
regex rgx("(\\w+)"); 

regex_iterator<string::iterator> it(seq.begin(), seq.end(), rgx); 
regex_iterator<string::iterator> end; 

for (; it != end; ++it) 
{ 
    cout << it->str() << endl; 
} 
+0

私はこの権利を得ていないと責めません。これについて私が見たドキュメンテーションは激しく吹き飛ぶ。 –

答えて

3

ここにいくつかのこと:

+0

まだ文字列をエスケープする必要があることを完全に忘れてしまった。それ以外の答えはうまくいきました。私が必要とするのは、数値だけの単語を無視することだけです。 – Chris

+0

@Chris:@Eugeneは私にそれを打ち明けました。私は余分な時間を費やしてより多くのことを説明し、あなたに完全な実例を与えてくれたからです。 –

+0

@Chris:More tricky。あなたは先読みのいくつかの形式、methinksを使用する必要があります。ここをクリックしてください:http://www.regular-expressions.info/refadv.html –

1

はこれを試してみてください。

まず、正規表現の文字列に\をエスケープする必要があります。結局のところ、まだC++の文字列です。

regex rgx("\\w"); 

また、正規表現\wは、1つの「単語文字」に一致します。

regex rgx("\\w+"); 

最後に、すべての可能な一致を反復処理するために、あなたはイテレータを使用する必要があります:あなたは単語全体を一致させたい場合は、使用する必要があります。ここに完全な実例があります:

#include <regex> 
#include <string> 
#include <iostream> 
using namespace std; 

int main() 
{ 
    string seq = "Some words. And... some punctuation."; 
    regex rgx("\\w+"); 

    for(sregex_iterator it(seq.begin(), seq.end(), rgx), it_end; it != it_end; ++it) 
     cout << (*it)[0] << "\n"; 
} 
+0

これは正常に機能しました。 – Chris

関連する問題