日期:2014-05-17  浏览次数:20473 次

开个贴讨论下正则,欢迎大家积极发言
这几天看了一下正则表达式,发现有时候需求用代码可能几十行,用正则也就几行能完成了。而且比较快。
在看正则的时候顺便百度了一下,有几个问题,来请教下大家,欢迎大家来讨论下哈

1.
正则表达式怎么去除重复的内容
例如
需求:找到出现且只出现1次的数字
12425,就返回145
1324.326 23.5 返回1456

2.同时满足n(n>=2)个条件或以上才能匹配成功
例如:验证密码的时候,密码至少是由符号,字母,数字其中的两项组成的
纯字母或纯数字,纯符号的,匹配不成功
字母+数字,字母+符号,数字+符号,字母+数字+符号都可以匹配成功

现在有5个字符串 a ab abc bcd efg
要求这五个字符串同时出现在一个字符串里面,才能匹配成功 
例如:a bo abc bcd ab efg 可以匹配成功
但是 abc bcd efg匹配不成功,虽然"a","ab","abc"……都出现在这个字符串中了


3.
javascript不支持逆向负声明,但是需求中要用到这个怎么办?


------解决方案--------------------
JScript code

<script type="text/javascript">

var str = "12425";
var reg = /(.)(.*)\1+/;
while(reg.test(str))
{
str = str.replace(reg,"$1$2");
}

alert(str);

</script>

------解决方案--------------------
1. 这不是正则干的活,直接字符串操作就可以了:

string result=string.Join("","12425".ToCharArray().Distinct().ToArray());

2.以密码验证为例,因为不知道你说的所谓符号指哪些,就以必需同时满足字母+数字为例:

^(?![a-zA-Z]+$)(?!\d+$)[a-zA-Z\d]+$

3.这个要看具体的情况 ,用其他方式来实现
------解决方案--------------------
第二个问题
字母+数字+特殊字符
 ^(?![a-zA-z]+$)(?!\d+$)(?![!@#$%^&*]+$)(?![a-zA-z\d]+$)(?![a-zA-z!@#$%^&*]+$)(?![\d!@#$%^&*]+$)[a-zA-Z\d!@#$%^&*]+$


字母+数字,字母+特殊字符,数字+特殊字符
^(?![a-zA-z]+$)(?!\d+$)(?![!@#$%^&*]+$)[a-zA-Z\d!@#$%^&*]+$

纯数字,纯字母,纯特殊字符
^(?:\d+|[a-zA-Z]+|[!@#$%^&*]+)$

------解决方案--------------------
string result=new string("12425".ToCharArray().GroupBy(a=>a).Where(g=>g.Count()==1).Select(g=>g.Key).ToArray());