[英]I am having trouble replacing a frist instance of certain word with regex_replace
我正在研究正則表達式。 我是初學者,我需要一些幫助來解決這個問題。
基本上,我正在尋找一種解決line0
和line1
問題的模式 - 我只想替換字符串的第一次出現。
所以,到目前為止,我得到了下面的代碼。 我還附上了我的 output 的圖片。
#include <iostream>
#include <string>
#include <regex>
#include <fstream>
using namespace std;
int main(){
string line0, line1;
line0 = "something, ford, chevy, dodge, something, honda";
line1 = "toyota, something, ford, chevy, dodge, honda, something";
regex pattern("^something");
string newLine2 = regex_replace(line0, pattern, "nissan");
cout<<newLine2<<endl;
string newLine3 = regex_replace(line1, pattern, "nissan");
cout<<newLine3<<endl;
return 0;
}
謝謝你。
正則表達式"^something"
表示字符串開頭的 "something" (這就是^
錨點的意思),這就是它在line1
中不起作用的原因。
如果您想在字符串中的任何位置替換它,請將模式更改為"something"
(沒有錨點)。 請記住,這將替換所有實例,也將替換單詞中的實例。 例如,如果您將one
替換為two
,您最終可能會得到如下令人難忘的短語:
當有兩個時,這是一個 foregtwo 的結論——他們永遠不會是 altwo。
要單獨使用單詞,您可以使用單詞邊界,例如"\\bsomething\\b"
此外,為了僅在第一次出現時重新定位,還有一些標志可以控制這些東西。 在這種情況下,可以使用 first-only 標志:
string newLine3 = regex_replace(line1, pattern, "nissan",
std::regex_constants::format_first_only);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.