高效程序员的秘密之——正则表达式

周末在知乎遇到一个问题,正则表达式的应用场景,由于手边没有电脑,于是用手机作答。好不容易码了几百字,结果不小心点击了一个超链接,悲剧了。于是周一上班第一件事儿就是继续作答。

 

正则表达式的处理对象是字符串,也就是我们经常说到的文本。主要体现在 3 个操作:

  1. 验证
  2. 查找
  3. 替换

我经常使用正则表达式的地方:

1. 写作

不管是写博客,还是写书,写项目文档,面对的都是文字(文本)。也许你辛辛苦苦写了篇介绍 javascript 的博客,却发现里面提到的网站都打不开了,原来站长为了 SEO,把连接 http://domain/1013/05/27/regular-expression.html 改成了http://domain/1013-05-27-regular-expression.html。更悲剧的是,整个网站的链接都改了。但是值得庆幸的是,这些修改是有规律的。于是,正则表达式登场。

2. 编程

比如 SQL 语句吧,我们得到了一个 sql 脚本文件,是 ansi sql,里面的语句 SELECT uname, password FROM user …… 但是我们需要把这条语句替换成:

SELECT 'uname', 'password' FROM 'user'    // MySQL
SELECT [uname], [password] FROM [user]    // SQL Server, Access
SELECT 'uname', 'password' FROM user      // ……

根据不同的 DBMS,生成不同的 SQL 方言。 于是,正则表达式登场。 

4. 偷懒

程序员都是比较懒的,科学发明也都是给懒人准备的,程序也是为了让懒人使用而开发的,正则表达式也是。正所谓:人有多大懒,才有多大闲

 

我们有这么一个 SQL:

CREATE TABLE IF NOT EXISTS `user` (
  `id` int(10) unsigned NOT NULL COMMENT '用户ID',
  `name` varchar(255) COMMENT '用户名'
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 COMMENT='用户';

我们需要把它变成:

/** 用户 */
public class User {
    private int id;  // 用户ID
    private String name;  // 用户名
    ……
}


5. 快速准确提取信息


以前我在 word 中提取客户的邮箱信息时,都是查找“邮箱”、“邮件”、“email”、“e-mail”、“信箱”。反正就是把所有 Email 的同义词都所有一遍。即使这样做了,

  1. 搜索的结果不精确,比如“网易在昨天晚上升级了所有的邮件服务器”,这句话里面没有 Email 的信息,但是确有“邮件”这个词,也被搜索到了。 
  2. 漏搜。比如“如果您觉得本产品有用,请联系我:[email protected]”,这句话含有邮箱信息,但却没有被搜索出来。 

于是,正则表达式登场。

你可能感兴趣的:(正则表达式)