簡體   English   中英

C ++正則表達式多行替換

[英]C++ Regular Expressions multiline replace

我再次尋求更多人的知識。

我有一個使用Boost庫的C ++解決方案,因為該解決方案需要在Linux環境中工作。 但是,我的知識屬於C#,C ++是我研究的一個新領域。

我正在尋找一個示例用法,說明如何創建某種模板並通過正則表達式替換值?

這是我正在談論的示例:

<VirtualHost *:80>
    ServerName  {$1}.somedomain.com
    ServerAlias {$1}
    ServerAdmin mr.admin@somedomain.com

    <Location />
        DAV svn
        SVNPath /some/dir/{$2}/{$3}/{$4}
        AuthType Basic
        AuthName "{$5}"
        AuthUserFile /some/dir/{$2}/{$3}/{$4}/{$4}.users
        Require valid-user
    </Location>
</VirtualHost>

值的關鍵:{已格式化,只需要用$ n替換即可}

$1 = sub domain alias (3 characters long)
$2 = is either "public" or "private"
$3 = a users username (no more than 25 characters)
$4 = the svn project name (no more than 30 characters and " " replaced with "_")
$5 = the actual repository name given by the user.

理想情況下,函數/方法將能夠處理此問題,因此我可以只說一個存儲庫對象,然后通過該對象渲染它。

非常感謝,肖恩

實際上,您不需要正則表達式的功能,可以使用查找/替換。

void replaceall(string& source, const string& pattern, const string& replacement)
{
    int curr = 0;
    while ((curr = str.find(pattern, curr)) != string::npos)
        str.replace(curr, parrern.length(), replacement);
}

void substitutetemplate(
        const string& subDomainAlias,
        bool publicOrPrivate,
        const string& userName,
        const string& svnProjectName,
        const string& repositoryName)
{
    string result = m_template;

    replaceall(result, "{$1}", subDomainAlias);

    string pop = publicOrPrivate ? "public" : "private";
    replaceall(result, "{$2}", pop);

    replaceall(result, "{$3}", userName);

    string svnProjectNameWithoutSpaces = svnProjectName;
    replaceall(svnProjectNameWithoutSpaces, " ", "_");
    replaceall(result, "{$4}", svnProjectNameWithoutSpaces);

    replaceall(result, "{$5}", repositoryName);
    m_result = result;
}

m_template應該是一個大字符串,其中包含帶有換行符的整個模板。

暫無
暫無

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

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