0
有這樣的模式:解析正則表達式命令
(parse file_name (txt or ini)) or/and (if (string)(== or !=)(string)/* must be at least one */ (and)/*cannot be at the end without expression on right*/)
說明:有兩個命令 - 「解析」和「如果」。有三種情況下混合這些命令:
- '解析' + '如果'
- '解析'
- '如果'
如果 '解析' 被使用,則 'FILE_NAME'必須提供,並且可以提供'txt'或'ini',但不必。
如果使用'if',那麼必須至少有一個操作'string'('=='或'!=')'string'。可以使用多個由'和'分隔的操作,但是'和'不能在操作列表的末尾使用,例如'如果a == c和b == d和' - 不正確。
我試着寫了下面的正則表達式,但它不工作:
std::string text = "parse file txt if hello==name and a!=age and owner==me";
boost::regex expr(".*(parse) *(\\w*) *(txt|ini)* *(if) *(*([a-z\"]+)(==|!=)([a-z\"]+) *(and)*)* *");
boost::smatch what;
std::cout << text << std::endl;
if (boost::regex_search(text, what, expr))
for (int j = 0; j < what.size(); ++j)
{
std::cout << what[j] << std::endl;
}
輸出:
parse file txt if hello==name and a!=age and owner==me
parse file txt if hello==name and a!=age and
parse
file
txt
if
owner==me
owner
==
me
and
什麼是這種情況下,正確的正則表達式?
什麼是無?空字符串是可接受的輸入嗎? – FailedDev
這意味着命令是空的,但是我認爲在運行之前檢查string.empty()會更容易,我會改變它。 – scdmb
爲什麼你想使用正則表達式呢?聽起來你想爲你的命令建立一個詞法分析器和解析器。您只需爲您的語言描述一個法律語法,自動化工具就可以爲您生成一個詞法分析器和解析器。 – R0MANARMY