正则表达式的怪事

breadjyh 2007-12-10 06:35:44
Regex reg = new Regex(@"true|false\s*,", RegexOptions.IgnoreCase);
Match m = reg.Match(t);
当t="true,"时m.length=4,当t="false,"时m.length=6
不知道是什么原因
...全文
60 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
breadjyh 2007-12-11
  • 打赏
  • 举报
回复
可算明白了,谢了先
apollolb2005 2007-12-10
  • 打赏
  • 举报
回复
基本都正解,千年更准确
root_ 2007-12-10
  • 打赏
  • 举报
回复
楼上的理解也有误,\s表示的是空格、制表符、换页符等空白字符的其中任意一个

“false\s*,”这部分正则表达式
在t="false," 时
这里的\s*是不匹配任何内容的,由\s*后的“,”来匹配"false,"中的“,”,最后的m.length=6是false的5个字符加“,”为6个字符
huqifei 2007-12-10
  • 打赏
  • 举报
回复
呵呵,楼上的同解了,写完发现你也发了
huqifei 2007-12-10
  • 打赏
  • 举报
回复
当t="false," ,你这里面正好6个字符,与 false\s 匹配
Regex reg = new Regex(@"true ¦false\s*,", RegexOptions.IgnoreCase);
你的正则表达式定义
@"true",是一种匹配,@"false\s*",是一种匹配。
当t="true,",你的匹配是"true",所以有4个字符,即length=4。
当t="false," ,你的匹配是"false," ,注意不是“false”,多了一个字符。因为\s*指代0到多个非空字符。所以逗号正好也是匹配项的。
所以最后的length=6,而不是5
root_ 2007-12-10
  • 打赏
  • 举报
回复
是楼主对“|”的理解问题,“|”表示左右两侧为“或”的关系,是以()来进行范围划分的,如果“|”不用()来限定范围,那么它的作用范围即为“|”左右两侧整体

true¦false\s*,
这个正则表达式的意义,就是“true”或者“false\s*,”

t="true,"时,正则匹配到的是“true”
t="false,"时,正则匹配到的是"false,"

按楼主的意思,应该改为
Regex reg = new Regex(@"(true|false)\s*,", RegexOptions.IgnoreCase); 
王集鹄 2007-12-10
  • 打赏
  • 举报
回复
(true)|(false\s*,)
王集鹄 2007-12-10
  • 打赏
  • 举报
回复
感觉少个括号
@"(true|false)\s*,"


否则就会成为
(true)|(false\s*)
breadjyh 2007-12-10
  • 打赏
  • 举报
回复
如果占一个长度是不是也应该每个结果都占一个长度啊
yilan505 2007-12-10
  • 打赏
  • 举报
回复
false\s
-------------
注意后面有一个\s,它也会占一个长度的.

110,535

社区成员

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

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

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