簡體   English   中英

我無法用 regex_replace 替換某個單詞的第一個實例

[英]I am having trouble replacing a frist instance of certain word with regex_replace

我正在研究正則表達式。 我是初學者,我需要一些幫助來解決這個問題。

基本上,我正在尋找一種解決line0line1問題的模式 - 我只想替換字符串的第一次出現。

所以,到目前為止,我得到了下面的代碼。 我還附上了我的 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);

您的正則表達式錨定在該行的開頭。 你需要做:

regex pattern("something");

替換字符串中任意位置出現的模式。

這將替換所有出現的模式。

這是一個演示

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM