我正在使用 C++ 11 的<regex>
支持,并想检查字符串的开头是否与正则表达式匹配。[如果有帮助,我可以切换到 Boost,但我的印象是它们基本相同。]
显然,如果我可以控制表达式的实际文本表示,我可以^
在它的开头粘贴 a 作为锚点。
但是,如果我只有一个regex
(或basic_regex
)对象怎么办?我可以修改它代表的正则表达式来添加锚点吗?还是我必须使用regex_search
,得到结果,并检查它是否从位置 0 开始?
我正在使用 C++ 11 的<regex>
支持,并想检查字符串的开头是否与正则表达式匹配。[如果有帮助,我可以切换到 Boost,但我的印象是它们基本相同。]
显然,如果我可以控制表达式的实际文本表示,我可以^
在它的开头粘贴 a 作为锚点。
但是,如果我只有一个regex
(或basic_regex
)对象怎么办?我可以修改它代表的正则表达式来添加锚点吗?还是我必须使用regex_search
,得到结果,并检查它是否从位置 0 开始?
您可以std::regex_constants::match_continuous
在使用 时添加标志regex_search
,例如,以下打印“1”和“0”:
#include <regex>
#include <string>
int main()
{
std::regex rx ("\\d+");
printf("%d\n", std::regex_search("12345abc1234", rx,
std::regex_constants::match_continuous));
printf("%d\n", std::regex_search("abc12345", rx,
std::regex_constants::match_continuous));
return 0;
}
该标志表示(C++11 §28.5.2/1 = 表 139):
表达式只能匹配从 开始的子序列
first
。