我想获得关键字匹配长度
但是,始终匹配计数为零
为什么..?
->seeJson(['url' => ['Please enter a URL to shorten.'] ])
答案 0 :(得分:0)
regex_match
确定正则表达式e是否匹配整个目标字符序列,可以指定为std :: string,C字符串或迭代器对。
您需要使用regex_search
确定正则表达式e与目标字符序列中的某个子序列之间是否匹配。
此外,您可以使用regex_iterator
,例如来自here:
string text = "sp_call('%1','%2','%a');";
std::regex regexp("%[0-9]");
auto words_begin =
std::sregex_iterator(text.begin(), text.end(), regexp);
auto words_end = std::sregex_iterator();
std::cout << "Found "
<< std::distance(words_begin, words_end)
<< " words:\n";
for (std::sregex_iterator i = words_begin; i != words_end; ++i) {
std::smatch match = *i;
std::string match_str = match.str();
std::cout << match_str << '\n';
}
找到2个字:
%1
%2
答案 1 :(得分:0)
您需要检查函数调用std::regex_match(text, m, regexp)
根据中的文档 http://en.cppreference.com/w/cpp/regex/regex_match 很明显,它返回一个布尔值 -
如果匹配,则返回 true ,否则返回 false 。 在任何一种情况下, 对象m已更新
所以你需要在你的代码中添加检查。
#include <iostream>
#include <regex>
int main()
{
std::string text = "sp_call('%1','%2','%a');";
std::regex regexp("%[0-9]");
std::smatch m;
bool match_found = std::regex_match(text, m, regexp); // capture the return value
if (match_found) // test it
{
int length = m.size();
std::cout << text.c_str() << " matched " << length << std::endl;
}
else
{
std::cout << "No match found" << std::endl;
}
return 0;
}