请帮助看看这算不算正则表达式的BUG?

syz 2015-02-10 10:59:17
测试文本1:
<item>test:0000</item>
<item>test1:11111</item>
表达式1:
(?<=<item>)\w*:\S*(?=</item>)
结果1:
matches返回结果2条
test:0000
test1:11111

测试文本2:
<item>test:0000 0000</item>
<item>test1:1111 11111</item>
表达式2:
(?<=<item>)\w*:.*(?=</item>)
结果2:
matches返回结果1条
test:0000 0000</item><item>test1:1111 1111

请问为什么第一个为什么返回正常?
...全文
139 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
syz 2015-02-10
  • 打赏
  • 举报
回复
谢谢3楼的朋友, 我这么写是为了声明我用“.”,“\S”统配符语法是一致的,如果测试文本不区分,他们是不能正确匹配的。 我用\S的目的是想统配所有非空白符的字符串,用.是想匹配中间含空格的字符串。
syz 2015-02-10
  • 打赏
  • 举报
回复
谢谢4楼的朋友, 应该是都反馈两条结果的,可是在.net里的引擎下结果不一致。请问你用的什么测试工具?
tcmakebest 2015-02-10
  • 打赏
  • 举报
回复
我两个都返回两条结果的.
於黾 2015-02-10
  • 打赏
  • 举报
回复
你先用你第二个正则去匹配第一组数据 用第一个正则匹配第二组数据,再看结果 就是你两组正则里,凭什么要把\S改成. 能说出任何道理来吗
syz 2015-02-10
  • 打赏
  • 举报
回复
谢谢回复,我对正则表达式不熟悉, 但文挡上说"."是统配换行符以外的所有字符,那它是不是应该找到"</item>"停止?如果正则表达式是总后递归匹配的话, 那第一个表达式也应该返回一组结果吧?
於黾 2015-02-10
  • 打赏
  • 举报
回复
1.如果测试文本相同,表达式不同,结果不同,找找表达式到底有什么问题 2.如果测试文本不同,表达式相同,结果错误,也找找表达式有什么问题 3.测试文本不同,表达式也不同,结果不同不是太正常了,你不找表达式写的有什么问题,而说正则有BUG,说有BUG前你真的了解过正则吗
syz 2015-02-10
  • 打赏
  • 举报
回复
谢谢8楼朋友的提醒
qldsrx 2015-02-10
  • 打赏
  • 举报
回复
严谨的做法是: (?<=<item>)\w*:[^<]*(?=</item>)
qldsrx 2015-02-10
  • 打赏
  • 举报
回复
请检查正则选项,是否启用了单行模式,单行模式中,换行符会被认为是空白字符。

110,533

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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