这两个正则表达式有什么区别?

zengjd 2008-09-18 05:36:50
((+|-)\d)?\d*
[+|-]\d+
...全文
212 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
vfan2010 2008-09-19
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 zengjd 的回复:]
我就是因为对 组的概念不明白。
才提问这个问题的。

两个表达式有什么区别呢?
[/Quote]

捕获组就是使用regex之后, 希望得到的那几个部分的字符串。
-_-!
zengjd 2008-09-19
  • 打赏
  • 举报
回复
哈哈,太好了
第二个是我写的,
第一个是书上的。

看来,我学正则表达式有进步啊!
slimfeng 2008-09-19
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 slimfeng 的回复:]


第一个可以表示有符号整数、无符号整数、什么都没有(空字符),所以说这个表达式没有实际意义,而改为(+|-)?\d+,可表示整数(有符号整数、无符号整数)
[/Quote]
当我没说,晕了
-过客- 2008-09-19
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 zengjd 的回复:]
哈哈,太好了
第二个是我写的,
第一个是书上的。

看来,我学正则表达式有进步啊!
[/Quote]

((+|-)\d)?\d*
最基础的,+在正则中有特殊意义,相当于{1,},用在这里要转义,或者把(+|-)替换为[+-],(+|-)这样写在一些正则工具中是不会报错的,但是用在程序中就会报下面的错误了
正在分析“((+|-)\d)?\d*”- 限定符 {x,y} 前没有任何内容。
在这个错误纠正以后,((\+|-)\d)?\d*,它是可以匹配空字符的,这有什么意义呢?
//一个例子
string test = "+123,-456,+001,|789";
MatchCollection mc = Regex.Matches(test, @"((\+|-)\d)?\d*");
foreach (Match m in mc)
{
richTextBox2.Text += "匹配到的内容:" + m.Value + "\n";
}
richTextBox2.Text += "匹配成功数:" + mc.Count;
//输出:
匹配到的内容:+123
匹配到的内容:
匹配到的内容:-456
匹配到的内容:
匹配到的内容:+001
匹配到的内容:
匹配到的内容:
匹配到的内容:789
匹配到的内容:
匹配成功数:9


不知道楼主看的是什么书,不过这种书不看也罢


[+|-]\d+
这一个相对来说要好些,至少在某种特殊场合如提取中还是能用的
但它的问题在于,在[]是不需要用“|”来表示或的关系的,这里加了一个“|”,也就多了一个可匹配的字符,下面例子中可以看到
另外就是\d+是可以匹配001之类0开头的数字的,前面有+-,我想这种数字应该也是不被允许的吧
//一个例子
string test = "+123,-456,+001,|789";
MatchCollection mc = Regex.Matches(test, @"[+|-]\d+");
foreach(Match m in mc)
{
richTextBox2.Text += "匹配到的内容:" + m.Value + "\n";
}
richTextBox2.Text += "匹配成功数:" + mc.Count;
//输出:
匹配到的内容:+123
匹配到的内容:-456
匹配到的内容:+001
匹配到的内容:|789
匹配成功数:4

除非楼主说“|789”也是楼主想匹配的内容,那我无话可说,+001也是一样
slimfeng 2008-09-19
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 zengjd 的回复:]

为什么都是错误的呢?
第一个可是我从书上抄的啊!
[/Quote]
第一个可以表示有符号整数、无符号整数、什么都没有(空字符),所以说这个表达式没有实际意义,而改为(+|-)?\d+,可表示整数(有符号整数、无符号整数)
mythad 2008-09-19
  • 打赏
  • 举报
回复
第一个是错的,主要原因在于:(+|-),这个并不是字符簇,所以无法用|符号进行选择,字符簇是这样的“[]”,所以第一个是错的,解释一下第二个:[+|-]就是有个加号或者减号,\d表示数字,后面的+号出现表示前面的\d出现1次或多次。至于分组的概念好理解一点是html标签,比如你要匹配<p></p>,<table></table>,你就要对前面的p和table进行分组,然后在后面引用这个分组,不多举例,比较复杂,具体找本正则表达式的书看看吧!
zengjd 2008-09-19
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 lxcnn 的回复:]
引用楼主 zengjd 的帖子:
((+|-)\d)?\d*
[+|-]\d+


本质上没什么区别,都是错误的,没什么用处的正则而已


至于组,可以看下,写的不是很详细,不过可以做下参考
http://www.cnblogs.com/lxcnn/archive/2007/06/10/777975.html
[/Quote]

为什么都是错误的呢?
第一个可是我从书上抄的啊!
HimeTale 2008-09-19
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 zengjd 的回复:]
哈哈,太好了
第二个是我写的,
第一个是书上的。

看来,我学正则表达式有进步啊!
[/Quote]
你只接受对你有利的说法,却回避正确的答案.
而且由于惰性自己不肯动手验证.

以上,楼主三思.
-过客- 2008-09-18
  • 打赏
  • 举报
回复
[Quote=引用楼主 zengjd 的帖子:]
((+|-)\d)?\d*
[+|-]\d+
[/Quote]

本质上没什么区别,都是错误的,没什么用处的正则而已


至于组,可以看下,写的不是很详细,不过可以做下参考
http://www.cnblogs.com/lxcnn/archive/2007/06/10/777975.html
wdgphc 2008-09-18
  • 打赏
  • 举报
回复
你下载个小软件 http://www.unibetter.com/deerchao/downloads/RegexTester.zip
打开后自己把 正则写上, 源串写上,就告诉你匹配什么了.很好用.区别一使便知.
zengjd 2008-09-18
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 HimeTale 的回复:]
第一个大意是匹配整数
第2个是外行写的吧....[+|-]表示加号或减号或竖线
[/Quote]
[+|-]表示加号或减号或竖线?难道不是或的关系么?
HimeTale 2008-09-18
  • 打赏
  • 举报
回复
第一个大意是匹配整数
第2个是外行写的吧....[+|-]表示加号或减号或竖线
zhangtian00_00 2008-09-18
  • 打赏
  • 举报
回复
第一个是可以有符号也可以没有符号,有符号的时候,肯定是个有符号数
第二个是有符号数
zengjd 2008-09-18
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 mythad 的回复:]
第一个是错的,第二个匹配有符号数。
第一个可改成(([+|-])\d)?\d* 这样可捕获匹配分组。
[/Quote]
可捕获匹配分组。 是什么意思?
mythad 2008-09-18
  • 打赏
  • 举报
回复
第一个是错的,第二个匹配有符号数。
第一个可改成(([+|-])\d)?\d* 这样可捕获匹配分组。
wdgphc 2008-09-18
  • 打赏
  • 举报
回复
第一个如果有 +/- 号,至少有一个数字. 也可以没有+/-号 ,也可以什么都没有
第二个,必须有一个 +/- 号和一个以上的数字
zengjd 2008-09-18
  • 打赏
  • 举报
回复
我就是因为对 组的概念不明白。
才提问这个问题的。

两个表达式有什么区别呢?
vfan2010 2008-09-18
  • 打赏
  • 举报
回复
至少捕获组不同
zengjd 2008-09-18
  • 打赏
  • 举报
回复
这个 [+|-]\d+ 匹配有符号数或无符号数?
为什么?

zhslsnow 2008-09-18
  • 打赏
  • 举报
回复
第一个匹配有符号数
第二个匹配有符号数或无符号数

110,571

社区成员

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

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

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