我正在使用 C++ 11 的 <regex>
支持,想要检查一个字符串是否以正则表达式匹配。[如果有必要,我可以转用 Boost,但我的印象是它们基本相同]
显然,如果我能够控制正则表达式的文本表示,我只需在开头加入锚点 ^
。
但是,如果我只有一个 regex
(或 basic_regex
)对象怎么办? 我可以修改它所表示的正则表达式以添加锚点吗?还是我必须使用 regex_search
来获取结果,并检查它是否从位置0开始?
我正在使用 C++ 11 的 <regex>
支持,想要检查一个字符串是否以正则表达式匹配。[如果有必要,我可以转用 Boost,但我的印象是它们基本相同]
显然,如果我能够控制正则表达式的文本表示,我只需在开头加入锚点 ^
。
但是,如果我只有一个 regex
(或 basic_regex
)对象怎么办? 我可以修改它所表示的正则表达式以添加锚点吗?还是我必须使用 regex_search
来获取结果,并检查它是否从位置0开始?
使用regex_search
时,您可以添加std::regex_constants::match_continuous
标志。例如,以下代码会打印出"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
开始的一个子序列。
"abc"
也是一个正则表达式,但只匹配完全相同的字符串。 - nhahtdh