Regular expressions supported by boost::spirit::lex
は大文字感度制御を含む:
(?r-s:pattern)
はオプション 'r' を適用してパターンを解釈しながら、オプション 's' を省略します。 オプションは0または1つ以上の文字'i'
または's'
です。 'i'
は、大文字と小文字を区別しないことを示します。 '-i'
は、大文字と小文字を区別します。 's'
は、 の意味を「.
」の構文に変更して、任意の1文字に一致させます。 は、 '\n
'以外の文字に一致するように '.
'の意味を変更します。
したがって、あなたが書くことができます。
literal_bool = L"True|False";
this->self.add(make_case_insensitive(literal_bool), TokenId_LiteralBool);
Implementatio:
literal_bool = L"(?i:true|false)";
this->self.add(literal_bool, TokenId_LiteralBool);
オリジナル答え
は、パターンケースが鈍感機能を導入します通常の(非ワイド)文字列の場合:n
std::string make_case_insensitive(const std::string& s)
{
std::string r;
std::string cC = "[xX]";
for(char c : s)
{
if (std::isalpha(c))
{
cC[1] = std::tolower(c);
cC[2] = std::toupper(c);
r += cC;
}
else
r += c;
}
return r;
}