[英]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.