Boost正则表达式子字符串匹配

4
我希望如果变量st中包含子字符串"regular",则返回输出"match"。这是否可能?
int main()
{
  string st = "some regular expressions are Regxyzr";

  boost::regex ex("[Rr]egular");
  if (boost::regex_match(st, ex)) 
  {
    cout << "match" << endl;
  }
  else 
  {
    cout << "not match" << endl;
  }
}

你试过了吗?如果是的话,发生了什么事情? - Anon.
是的,我得到了“不匹配” 如果st =“规则”,我得到了“匹配” - bob
3个回答

15
Boost::regex_match 仅匹配整个字符串,您可能需要使用 Boost::regex_search。

7

regex_search可以满足你的需求;regex_match的文档描述为:

确定给定的正则表达式是否与给定字符序列完全匹配

(强调在我引用的原始URL中)。


0

您的问题可以在库文档中的示例 boost::regex 中找到答案。

另一种方法是:

您可以使用 boost::regex_iterator,这对于解析文件等操作非常有用。

string[0], 
string[1] 

下面表示开始和结束迭代器。

例如:

boost::regex_iterator stIter(string[0], string[end], regExpression)
boost::regex_iterator endIter

for (stIter; stIter != endIter; ++stIter)
{
   cout << " Whole string " << (*stIter)[0] << endl;
   cout << " First sub-group " << (*stIter)[1] << endl;
}

}


该页面上被接受的答案更好地解释了sregex_iterator的使用方法。https://dev59.com/p03Sa4cB1Zd3GeqPrgjn - syam

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接