Tôi muốn khớp tất cả các dòng bắt đầu bằng một từ nhất định, nói iheap. Nếu tôi không nhầm lẫn biểu thức chính quy (theo cú pháp ECMAScript) "^iheap.*"
nên thực hiện thủ thuật. Tuy nhiên, khi tôi thử nghiệm điều này trong C++ 11 bằng cách sử dụng thư viện regex của libC++, chỉ có dòng đầu tiên được khớp. Vì vậy, "^..."
dường như chỉ khớp với phần đầu-đầu vào thay vì đầu-of-line.Kết hợp "đầu dòng" bằng cách sử dụng thư viện libC++ regex (C++ 11)
Dưới đây là một ví dụ:
#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;
}
Output:
iheap says hello.
iheap says hello again.
IHEAP
iheap says hello again.
Đây có phải là một lỗi của libC++ hay tôi làm điều gì sai? Cảm ơn!
Lưu ý: Tôi đang sử dụng Mac OS X Mountain Lion và Apple LLVM Compiler 4.0 (về cơ bản là ảnh chụp của clang 3.1 SVN).
chỉ vấp ngã về vấn đề này ... fyi, boost :: regex (ở chế độ EMCAScript) khớp với đầu-of-line, tức là regex của bạn sẽ hoạt động. – fscan
Hrmm, chỉ hơi liên quan, nhưng '$' không khớp với '\ r \ n' trong VS2013 - phải mất' \ s * $ 'hoặc tương tự để khớp ... – Cameron