boost正则表达式语法错误?

xblan 2010-09-03 03:03:28
截取html中的内容
(?<=<li><input[^>]*>).*?(?=</li>)

这句为什么放到零宽后行断言中就错了?
<input[^>]*>
...全文
192 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
taodm 2010-09-03
  • 打赏
  • 举报
回复
哇,都惊动过客大牛啦。
-过客- 2010-09-03
  • 打赏
  • 举报
回复
不太了解boost,不过(?<=expression)语法,我所接触的语言中,目前只有.NET中支持不定长度量词

其它一些语言,要么不支持这种语法,要么只支持固定长度的子表达式,或者量词“?”

对于“*”、“+”、“{m,n}”、“{m,}”这样的不定长度量词,由于实现复杂,目前基本上都是不支持的
wind_breez 2010-09-03
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 wind_breez 的回复:]

是不是负向零宽断言里 (?<=exp)里exp不能有*,+,?等表示重复的字符?
零宽断言(?=<li><input[^>]*>).*?(?=</li>)好像就又没问题。
使用(?<=<li><input[^>]{5}>).*?(?=</li>)好像可以但是
(?<=<li><input[^>]{0,5}>).*?(?=</li>)就有错了。
[/Quote]

是不是说负向零宽断言的exp里需要确定的字符个数?
wind_breez 2010-09-03
  • 打赏
  • 举报
回复
是不是负向零宽断言里 (?<=exp)里exp不能有*,+,?等表示重复的字符?
零宽断言(?=<li><input[^>]*>).*?(?=</li>)好像就又没问题。
使用(?<=<li><input[^>]{5}>).*?(?=</li>)好像可以但是
(?<=<li><input[^>]{0,5}>).*?(?=</li>)就有错了。
ayw215 2010-09-03
  • 打赏
  • 举报
回复
你用一些正则的测试工具先自己测试下呗
taodm 2010-09-03
  • 打赏
  • 举报
回复
错是咋个错啊?
楼主还是先google“ 提问的智慧 ”吧。
-过客- 2010-09-03
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 taodm 的回复:]
哇,都惊动过客大牛啦。
[/Quote]

xblan 2010-09-03
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 wind_breez 的回复:]
引用 3 楼 wind_breez 的回复:

是不是负向零宽断言里 (?<=exp)里exp不能有*,+,?等表示重复的字符?
零宽断言(?=<li><input[^>]*>).*?(?=</li>)好像就又没问题。
使用(?<=<li><input[^>]{5}>).*?(?=</li>)好像可以但是
(?<=<li><input[^>]{0,5}>).*?(?=</li>)就有错了……
[/Quote]

找了boost文档,发现里边说,(?<=exp)必须是固定长。
xblan 2010-09-03
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 ayw215 的回复:]
你用一些正则的测试工具先自己测试下呗
[/Quote]

测试了,有些工具可以,有些不行,又不知他们的工具都是用的什么库,所以来提问boost的。
xblan 2010-09-03
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 taodm 的回复:]
错是咋个错啊?
楼主还是先google“ 提问的智慧 ”吧。
[/Quote]

搜过了,没找到类似的问题,所以来发帖。
jackzhhuang 2010-09-03
  • 打赏
  • 举报
回复
?<=里必须是固定长度的,几乎所有正则表达式都有这个规定,不是boost的问题

64,382

社区成员

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

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