牛刀小试RegEx


img_regex_big.gifRegEx中文叫做正则表达式,虽然不是很新的东西了,我很纳闷我居然是才开始了解它。在数据库中查询keyword一般是写成

select * from tablename where columnname LIKE ‘%keyword%’

而java我记得不是很清楚了,大概是

if(myString.indexOf(keyword) != -1){
//do things…
}

这个只是简单匹配,如果有复杂要求就要写多得多的代码了。例如判断keyword是否是一个数字开头,紧跟1个小写字母,跟随若干数字,最后以”pattern”结尾等等,就不是一行代码能写出来的了。对于上例,RegEx+Ruby的写法就是

if keyword =~ /^\d[a-z]\d+pattern$/
#do things
end

上式中,//是RegEx的边界,类似””是字符串的边界一样。接下来^代表匹配的开始;\d代表数字,就是0 – 9;[a-z]就是一个从a到z的小写字母了;+是后缀,表示1个或多个,因此\d+就是1个或多个数字的意思了;最后作为关键字的pattern直接写上即可;$代表匹配的结束。

更灵活的应用就是|符号和()括号了。例如判断文本是否包含x或X,RegEx就可以写

/x|X/

如果要判断文本是否包含多个连续的x或者X,例如xXX、XxX,RegEx就可以写

/(x|X)+/

如果要判断文本是否包含XXX、XXXX、XXXXX,RegEx可以写

/X{3,5} /

目前的了解就是这么多了,不过以上这些组合起来应该已经可以应付很多种情况了。继续学习。

UPDATE: Regex tutorial from guru99.com