C#中的正则表达式和js中的是否一样?

按照书上写的一个c#中正则表达式的验证:
string p = "^[0-9]*$";
Regex rx = new Regex(p);
return rx.IsMatch(s);
感觉和js中的正则表达式差不多,但我这本书上并没有对c#的正则表达式的一些详细说明,c#中的正则表达式和js中的使用方法一样吗?

正则表达式只是一个系统的概念,然后具体语言再对其实现。

其实两者是不同的。但是由于使用者的习惯,大部分的时间是相同的。

在js中正则表达式是一个类型。可以直接使用var s = /pattern/;这样的形式实现。所以说在js只直接是一种类型的。象用其他诸如字符串等类型一样使用他,只不过定界符不同。

而在C#本身是不存在的,直接使用的是一种类库中的一个类实现的。也就是说正则表达式其实只是类库中的一个类而已。然后对这个类定义有几个静态变量,变量,方法与函数等等,你只要知道他是一个类就可以了!

至于相同的部分那就是大部分的元字符表示法,比如^表示开始,$表示结尾等等,也就是说他们大部分相同的地方就是对于元数据的定义,\d等等,这样你在不同的语言中,虽然实现不同,但对于元数据却使用相同的东西,以便于你的记忆,不必到各种语言中都再去学习了。

不同的是对于表达式的限定及扩展不一样的。在js中你可以直接跟在后面实现,如:
var s = /pattern/igm;
后边的i表示忽略大小写,g表示全局,m表示多行。
但在C#中利用的是另一个参数,regexoptions,枚举型的,除了这些这外还有对编译等等,比js要多。而对于运算符如|选择?等都是一样的!也就是说,js中的写法在C#中一定能用,除模式限制部分,而在C#中的写法大部时间js也能用。

表达式还是要学习的,不是学的元数据表示,而是对于那个类语法的学习,比如在js中存在test方法,就是测试匹配,但不设置变量,而在C#中没有,有一个isMatch与之相同功能。不学习这些东西你怎么会知道呢?所以必须要学习的,而且顺便说一下C#上的正则表达式比js强多了,还有很多的东西是js正则表达式中所没有的,比如动态正则表达式,而在js中是不可能实现的。在C#中却可以实现。如果不学习,那么你的表达式也只能处于常用的基础上!

所以很不暂同一楼的观点。
温馨提示:内容为网友见解,仅供参考
第1个回答  2012-04-27
正则表达式的规则在所有语言里的使用都相同,这就是正则表达式,只是语法不同而已
第2个回答  2012-05-16
正则表达式可以说在任何语言里都通用的,共用一个祖先,是一项最伟大的发明
第3个回答  2012-04-27
同意 @kusirp21 的说法,具体你可以看看《精通正则表达式 第三版》,里面有详细讲解各种正则表达式引擎的实现区别

简而言之,javascript的正则表达式引擎没有.net提供的强大,.net\java\php都提供特别的功能是别的平台没有的。javascript正则表达式引擎还依赖于浏览器实现,不同的浏览器在底层实现上也不同,性能也不同
第4个回答  2012-04-27
一样的,所有语言的正则表达式都是一样的追问

那就是说我没必要重新学习C#的正则表达式了!

追答

都一样,还学什么呀,c#和java几乎相同,相信你要是会java的话,c#很快就能上手。

C#中的正则表达式和js中的是否一样?
其实两者是不同的。但是由于使用者的习惯,大部分的时间是相同的。在js中正则表达式是一个类型。可以直接使用var s = \/pattern\/;这样的形式实现。所以说在js只直接是一种类型的。象用其他诸如字符串等类型一样使用他,只不过定界符不同。而在C#本身是不存在的,直接使用的是一种类库中的一个类实现...

...吗?例如匹配email或URL。C#的正则表达式与其他语言的完全一样...
有,语法基本相同 email的 public bool TestEmailRegex(string emailAddress){ \/\/ string patternLenient = @"\\w+([-+.]\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*";\/\/ Regex reLenient = new Regex(patternLenient);string patternStrict = @"^(([^<>()[\\]\\\\.,;:\\s@\\"...

关于C#正则表达式截取代码的问题,网页中有很多 xxxxxxxxx 2012-9-25...
为什么要用正则表达式呢?js不是简单的多嘛。.innerHTML这个属性便能得到一对标签中所有的内容。

JavaScript中的正则有几个不同于其他语言的地方
这个讲起来比较简单,就是:在Perl和其他一些linux命令的正则表达式中,字符类[]中如果包含了一个紧跟着左方括号的右方括号[]],则这个右方括号会被当作一个普通字符,即只能匹配”]”,而在JavaScript中,这种正则会被识别成一个空字符类后跟一个右方括号,空字符类什么都不匹配.[^]]也类似:在JavaScript中,它匹配的...

C# 有没有类似js的 Regexp.exec()
MatchCollection-包含了一正则表达式找到的所有匹配项 Match-包含了一次匹配中所有匹配的文本 GroupCollection-包含了一次匹配中的所有分组.Group-包含了一个分组集合中一个组的细节 CaptureCollection=包含一个组的所有Capture对象 Capture-返回组内一次捕获所匹配的字符串 类似这样 MatchCollection mc;String[] ...

c# 里的正则表达式 为什么 \\s 和 \\S 都说 无效的转义符。
因为正则表达式的前面一般都加@符号,@符号的作用是后面所跟字符串不进行转义,也就是后面跟的字符串是原封不动的 如@"^[1-9]\\d*$",

正则表达式,怎么样判断是字符串只能为true或者false?
不知道你说的是在哪个语言里面,我这里提供四种,js、C#、Java、Python,如果都不是再追问我,大多数都是可以直接baidu到的 JavaScript里面:var isNumber=\/^\\d+$\/.test('1245');\/\/truevar isNumber2=\/^\\d+$\/.test('abc');\/\/false C#:System.Text.RegularExpressions.Regex.IsMatch("123","^...

c# 正则表达式提取()中的值
您的正则表达式基本正确,只需要将结尾的$符号去掉即可匹配包含COM的子串。另外,如果括号中只有COM后面的数字部分需要提取,可以使用正则表达式的捕获组功能,将COM和数字部分分别放在不同的捕获组中,然后只提取数字部分即可。解释一下上述正则表达式的含义:\\b 匹配单词边界,用于确保COM前面不会有其他字符...

用c#一个正则表达式匹配到了多个符合正则的结果!
如果有多个匹配可以继续调用Match对象的NextMatch得到下一个匹配Match对象,但是这个Match对象不一定匹配,可以调用Success获取当前Match对象是否匹配成功 如果想获取捕获组的内容,可以使用Match的Group获取,他是一个带索引器的集合,使用[0]获取匹配内容(也就是Match的Value),由[1]开始依次对应捕获组的编号 ...

使用正则表达式的优缺点 C#
1.正则表达式只适合匹配文本字面,不适合匹配文本意义:像匹配url,email这种纯文本的字符就很好,但比如匹配多少范围到多少范围的数字,如果你这个范围很复杂的话用正则就很麻烦。或者匹配html,这个是很多人经常遇到的,写一个复杂匹配html的正则很麻烦,不如使用针对特定意义的处理器来处理(比如写语法分析...

相似回答