From cbb45cc51156a429b3a9bea9f352bb3bf1c8b70c Mon Sep 17 00:00:00 2001 From: Nitin Kumar <59679977+lazysegtree@users.noreply.github.com> Date: Thu, 22 Jan 2026 16:24:59 +0530 Subject: [PATCH] fix: Fix regex parsing for CXXOPTS_NO_REGEX --- include/cxxopts.hpp | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/include/cxxopts.hpp b/include/cxxopts.hpp index a5c67f1..fd998eb 100644 --- a/include/cxxopts.hpp +++ b/include/cxxopts.hpp @@ -730,7 +730,7 @@ inline ArguDesc ParseArgument(const char *arg, bool &matched) { argu_desc.arg_name.push_back(*pdata); pdata += 1; - while (isalnum(*pdata, std::locale::classic()) || *pdata == '-' || *pdata == '_') + while (isalnum(*pdata, std::locale::classic()) || *pdata == '-' || *pdata == '_' || *pdata == '.') { argu_desc.arg_name.push_back(*pdata); pdata += 1; @@ -757,13 +757,11 @@ inline ArguDesc ParseArgument(const char *arg, bool &matched) else if (strncmp(pdata, "-", 1) == 0) { pdata += 1; - argu_desc.grouping = true; - while (isalnum(*pdata, std::locale::classic())) - { - argu_desc.arg_name.push_back(*pdata); - pdata += 1; + if(isalnum(*pdata, std::locale::classic())) { + argu_desc.grouping = true; + argu_desc.arg_name = std::string(pdata); + matched = true; } - matched = !argu_desc.arg_name.empty() && *pdata == '\0'; } return argu_desc; }