diff --git a/Source/Core/Core/Debugger/PPCDebugInterface.cpp b/Source/Core/Core/Debugger/PPCDebugInterface.cpp index ff87e82300..855916545c 100644 --- a/Source/Core/Core/Debugger/PPCDebugInterface.cpp +++ b/Source/Core/Core/Debugger/PPCDebugInterface.cpp @@ -443,7 +443,7 @@ std::string PPCDebugInterface::GetDescription(u32 address) const std::optional PPCDebugInterface::GetMemoryAddressFromInstruction(const std::string& instruction) const { - std::regex re(",[^r0-]*(-?)(0[xX]?[0-9a-fA-F]*|r\\d+)[^r^s]*.(p|toc|\\d+)"); + static const std::regex re(",[^r0-]*(-?)(0[xX]?[0-9a-fA-F]*|r\\d+)[^r^s]*.(p|toc|\\d+)"); std::smatch match; // Instructions should be identified as a load or store before using this function. This error diff --git a/Source/Core/DolphinQt/Settings/BroadbandAdapterSettingsDialog.cpp b/Source/Core/DolphinQt/Settings/BroadbandAdapterSettingsDialog.cpp index 6e1e404b92..91aeae8a22 100644 --- a/Source/Core/DolphinQt/Settings/BroadbandAdapterSettingsDialog.cpp +++ b/Source/Core/DolphinQt/Settings/BroadbandAdapterSettingsDialog.cpp @@ -100,7 +100,9 @@ void BroadbandAdapterSettingsDialog::SaveAddress() switch (m_bba_type) { case Type::Ethernet: - if (!std::regex_match(bba_new_address, std::regex("([0-9A-Fa-f]{2}:){5}([0-9A-Fa-f]{2})"))) + { + static const std::regex re_mac_address("([0-9A-Fa-f]{2}:){5}([0-9A-Fa-f]{2})"); + if (!std::regex_match(bba_new_address, re_mac_address)) { ModalMessageBox::critical( this, tr("Broadband Adapter Error"), @@ -111,7 +113,7 @@ void BroadbandAdapterSettingsDialog::SaveAddress() } Config::SetBaseOrCurrent(Config::MAIN_BBA_MAC, bba_new_address); break; - + } case Type::BuiltIn: Config::SetBaseOrCurrent(Config::MAIN_BBA_BUILTIN_DNS, bba_new_address); break; diff --git a/Source/Core/InputCommon/ControlReference/ExpressionParser.cpp b/Source/Core/InputCommon/ControlReference/ExpressionParser.cpp index 65f9ceba4f..c93dcc5c3d 100644 --- a/Source/Core/InputCommon/ControlReference/ExpressionParser.cpp +++ b/Source/Core/InputCommon/ControlReference/ExpressionParser.cpp @@ -102,10 +102,10 @@ std::string Lexer::FetchDelimString(char delim) std::string Lexer::FetchWordChars() { - // Valid word characters: - std::regex rx(R"([a-z\d_])", std::regex_constants::icase); - - return FetchCharsWhile([&rx](char c) { return std::regex_match(std::string(1, c), rx); }); + return FetchCharsWhile([](char c) { + return std::isalpha(c, std::locale::classic()) || std::isdigit(c, std::locale::classic()) || + c == '_'; + }); } Token Lexer::GetDelimitedLiteral() @@ -134,7 +134,8 @@ Token Lexer::GetRealLiteral(char first_char) value += first_char; value += FetchCharsWhile([](char c) { return isdigit(c, std::locale::classic()) || ('.' == c); }); - if (std::regex_match(value, std::regex(R"(\d+(\.\d+)?)"))) + static const std::regex re(R"(\d+(\.\d+)?)"); + if (std::regex_match(value, re)) return Token(TOK_LITERAL, value); return Token(TOK_INVALID);