std::regex库执行情况怎么和预计的不一样?求正则帝

Zimmerk 2013-07-13 06:54:13
用std::regex分析网页数据,正则我先用工具测试了运行正常,但到了std::regex下死活匹配不到,我用了简单的数据进行测试,还是不行,大家帮忙看看是我写错了么?

源文本:
<a href="./n0866_mitsuka_koizumi_tg_j.html">


正则:
引用
"./n(.*)">


我是想抓取到源文件里的n0866_mitsuka_koizumi_tg_j.html这个网址。这里的正则用工具测试能正常匹配到

下面用std::regex库

std::smatch m;
std::regex re("\"./n(.*)\">");
strBuffer = "<a href=\"./n0866_mitsuka_koizumi_tg_j.html\">";
while (std::regex_match(strBuffer, m, re, std::regex_constants::match_default))
{
cout << "================" << endl;
cout << m[0] << endl << m[1] << endl;
}

std::regex_match函数一直返回0,改为用 std::regex_search函数,能匹配到,但结果变成0866_mitsuka_koizumi_tg_j.html">

我凌乱了。。
自己摸索了很长时间,百思不得骑姐啊。。。
...全文
218 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
www_adintr_com 2013-07-13
  • 打赏
  • 举报
回复
引用 3 楼 bllqbz 的回复:
[quote=引用 2 楼 adlay 的回复:] 用 std::regex re("<.*/n(.*)\">"); 呀, 你的第一个字符是 <, 不知道你一开始来个 " 是什么意思, 测试是怎么通过的.
噢,是的,一开始的代码写错了。我查了一下,不应该用regex_match的,因为它要求完全匹配。 应该改用regex_search,只搜索匹配的部分。我后面改用regex_search了。 现在我各种改啊 ,,改成 \"\\./(n.+)(?=\\.html) 想匹配到 n0866_mitsuka_koizumi_tg_j 就行了,但还是匹配到n0866_mitsuka_koizumi_tg_j.html"> 我想是不是那个.+ 引发的无限匹配[/quote] 你的目的究竟是什么? 要提取中间的网址 ./n0866_mitsuka_koizumi_tg_j.html 吧? 用 search 的话正则写成 std::regex re("href=\"([^\"]*)\""); 即可.
Zimmerk 2013-07-13
  • 打赏
  • 举报
回复
引用 2 楼 adlay 的回复:
用 std::regex re("<.*/n(.*)\">"); 呀, 你的第一个字符是 <, 不知道你一开始来个 " 是什么意思, 测试是怎么通过的.
噢,是的,一开始的代码写错了。我查了一下,不应该用regex_match的,因为它要求完全匹配。 应该改用regex_search,只搜索匹配的部分。我后面改用regex_search了。 现在我各种改啊 ,,改成 \"\\./(n.+)(?=\\.html) 想匹配到 n0866_mitsuka_koizumi_tg_j 就行了,但还是匹配到n0866_mitsuka_koizumi_tg_j.html"> 我想是不是那个.+ 引发的无限匹配
www_adintr_com 2013-07-13
  • 打赏
  • 举报
回复
用 std::regex re("<.*/n(.*)\">"); 呀, 你的第一个字符是 <, 不知道你一开始来个 " 是什么意思, 测试是怎么通过的.
Zimmerk 2013-07-13
  • 打赏
  • 举报
回复
修改了一下,改用regex_search了,刚上网查了regex_match是完全匹配的 正则改成 \"./(n.*?)\"> 但后面那两符号总是会匹配到 n0866_mitsuka_koizumi_tg_j.html">

64,662

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧