12

iheap など、特定の単語で始まるすべての行に一致させたいと考えています。私が間違っていなければ、正規表現 (ECMAScript 構文)"^iheap.*"でうまくいくはずです。しかし、libc++ の正規表現ライブラリを使用して C++11 でこれをテストしたところ、最初の行だけが一致しました。その"^..."ため、行頭ではなく入力の先頭にのみ一致するようです。

次に例を示します。

#include <string>
#include <regex>
#include <iostream>

using namespace std;

int main() {
        regex rx("^iheap.*");
        string s = "iheap says hello.\niheap says hello again.\n";
        cout << s << regex_replace(s, rx, "IHEAP");
        return 0;
}

出力:

iheap says hello.
iheap says hello again.
IHEAP
iheap says hello again.

これは libc++ のバグですか、それとも何か間違っていますか? ありがとう!

: Mac OS X Mountain Lion と Apple LLVM Compiler 4.0 (基本的には clang 3.1 SVN のスナップショット) を使用しています。

4

2 に答える 2

6

関連するすべての標準を調べましたが、私が知る限り、エンジンがマルチラインモードでない限り、^は文字列の先頭にのみ一致し、改行には一致しません。デフォルトのエンジンはECMA-262です 。エンジンはデフォルトでマルチラインモードではなく、stdC++インターフェイスを使用してマルチラインモードにする方法がわかりません。

そうは言っても、誰かが私を別の言い方をする規範的なテキストに向けることができれば、これをバグレポートと見なし、修正するために最善を尽くします。

于 2012-08-14T23:44:30.293 に答える