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

本文探讨了正则表达式的三大应用:验证、查找及替换。通过实例展示如何利用正则表达式解决文本处理中的常见问题,如更新网站链接、转换SQL方言、从文档中提取特定信息等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

 

正则表达式的处理对象是字符串,也就是我们经常说到的文本。主要体现在 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. 漏搜。比如“如果您觉得本产品有用,请联系我:xxxx@xxxx.com”,这句话含有邮箱信息,但却没有被搜索出来。 

于是,正则表达式登场。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值