VC里正则表达式匹配 惰性匹配的有关问题
VC里正则表达式匹配 惰性匹配的问题
正则表达式为 boost::regex w("(\\w+\\*)+?"); //惰性匹配
\w+\* 匹配以星号结尾的字符串。
(\w+\*)+ 匹配多个以星号结尾的字符串。
(\w+\*)+? 惰性匹配多个以星号结尾的字符串。
如果输入的字符串为temp:254424501*239184501*
如何把两个以星号结尾的子串都匹配出来。
regex_match(temp,smatch,w)
使得
smatch[0] = 254424501*239184501*;
smatch[1] = 254424501*;
smatch[2] = 239184501*;
现在的匹配结果为:
smatch[0] = 254424501*239184501*;
smatch[1] = 239184501*;
这是为什么呀
------解决思路----------------------
你的正则表达式里只有一个子表达式,当然只能有smatch[1],再怎么改也不会出现smatch[2]的
可以考虑这样改:
正则表达式为 boost::regex w("(\\w+\\*)+?"); //惰性匹配
\w+\* 匹配以星号结尾的字符串。
(\w+\*)+ 匹配多个以星号结尾的字符串。
(\w+\*)+? 惰性匹配多个以星号结尾的字符串。
如果输入的字符串为temp:254424501*239184501*
如何把两个以星号结尾的子串都匹配出来。
regex_match(temp,smatch,w)
使得
smatch[0] = 254424501*239184501*;
smatch[1] = 254424501*;
smatch[2] = 239184501*;
现在的匹配结果为:
smatch[0] = 254424501*239184501*;
smatch[1] = 239184501*;
这是为什么呀
------解决思路----------------------
你的正则表达式里只有一个子表达式,当然只能有smatch[1],再怎么改也不会出现smatch[2]的
可以考虑这样改:
regex w("\\w+\\*");
smatch match;
string tmp = "temp:254424501*239184501*";
auto m_begin = sregex_iterator(tmp.begin(), tmp.end(), w);
auto m_end = sregex_iterator();
for (sregex_iterator m = m_begin; m != m_end; ++m)
{
cout << (*m)[0] << endl;
}