审查征集贴:http://www.cnblogs.com/BeginnerClassroom/archive/2010/07/30/1788649.html
附录征集贴:http://www.cnblogs.com/BeginnerClassroom/archive/2010/08/04/1792175.html
欢迎各位园友对本书的某一部分内容进行拓展,将以附录的形式附在书后。
要求:
- 紧紧围绕一两个中心展开;
- 逻辑清晰,行文流畅;
- 考虑到初学者的基础。
- 写作时间最好不要少于一星期。
我写东西都是写好以后先放在那里,过段时间再读,重新修改,如此反复几次,就基本上很流畅了。
(PS:会署名,但无稿费,因为本来就没多少,不够分的。当然如果发了大财,我会分给大家的。)
标题 | 作者 | 状态 |
关于RichTextBox修改字体大小的研究 | 李雨来 | 已完稿 |
委托和接口的区别 | 汤非凡 | 正在写 |
XML格式注释 | Capricornus | 正在写 |
接口的显式实现以及与抽象类的比较 | 顾磊 | 正在写 |
.NET版本变更表 | 张智鸣 | 正在写 |
字符编码 | 赵士敬 | 正在写 |
浅谈流的读取 | 黄志斌 | 正在写 |
正则表达式在EmEditor里的应用 | 柳永法 | 正在写 |
绘图缓存 | 待选 | |
正则表达式应用实例
(本文柳永法由提供)
正则表达式表面看起来很复杂,其实很简单,它的核心就是一种思想——匹配。替换、遍历只是它的附加功能。我自从接触正则表达式后,感觉思维一下子开阔很多,很多操作不由自主地会想到用正则表达式来实现。
实际应用中,我经常用到的正则表达式其实并不多,比如\w、\W、\s、\S、\ D、\ d、+、*、?、[]、{n,m}等,基本上就能满足我的大部分需求。大多数人只把正则用在JS、VBS,.NET里,其实正则表达式的应用范围远不止这些,比如很多文本编辑器对正则的支持就非常好,你可以不用写程序就能很方便的把它应用到日常开发与写作里。以下是我在EmEditor里的一些应用实例,供初学者参考。
图1 EmEditor的界面
例1. 根据Name及URL生成超链接
原始文本:
博客园 http://www.cnblogs.com/
柳永法 http://www.yongfa365.com/
谷歌 http://www.google.cn/
正则表达式:
(\S+)\s+(\S+)
替换为:
<a href="\2">\1</a>
结果:
<a href="http://www.cnblogs.com/">cnblogs</a>
<a href="http://www.yongfa365.com/">柳永法</a>
<a href="http://www.google.cn/">谷歌</a>
说明:因为正则表达式 (\S+)\s+(\S+)有两个括号,所以它有两个分组,第一个分组匹配Name,第二个分组匹配URL。替换表达式里的\1对应第一个分组匹配到的Name(如“博客园”),\2对应第二个分组匹配的URL(如“http://www.cnblogs.com/”),这样就得到了我们想要的结果[①]。
例2. 生成表单
原始文本:
用户名 UserName
密码 UserPassword
正则表达式:
(\S+)\s+(\S+)
替换为:
<td>\1:</td><td><input name="txt\2" /></td>
结果:
<td>用户名:</td><td><input name="txtUserName" /></td>
<td>密码:</td><td><input name="txtUserPassword" /></td>
说明:此例和例1非常相似,\1对应第一个分组(如“用户名”),\2对应第二个分组(如“UserName”)。
例3. 生成SQL语句
原始文本:
123
234
345
正则表达式:
(\d+)
替换为:
insert into Card(Code,AddTime) values ('\1',getdate())
替换结果:
insert into Card(Code,AddTime) values ('123',getdate())
insert into Card(Code,AddTime) values ('234',getdate())
insert into Card(Code,AddTime) values ('345',getdate())
说明:正则表达式 (\d+)匹配每条数据,与替换表达式里的\1对应。
例4. 生成类的内部代码
原始文本:
用户名 UserName
密码 UserPassword
正则表达式:
(\S+)\s+(\S+)
替换为:
string _\2;\n/// <summary>\n/// \1\n/// </summary>\npublic string \2\n{\n get { return _\2; }\n set { _\2 = value; }\n}
结果:
string _UserName;
/// <summary>
/// 用户名
/// </summary>
public string UserName
{
get { return _UserName; }
set { _UserName = value; }
}
string _UserPassword;
/// <summary>
/// 密码
/// </summary>
public string UserPassword
{
get { return _UserPassword; }
set { _UserPassword = value; }
}
说明:虽然看起来很复杂,其实它的原理和前面是一样的。仔细观察就会发现里面也有后向引用符\1和\2,只不过替换表达式里的文本长一点,并且多了个换行符\n而已。
以上用到的正则表达式是不是很少,但却很实用呢?特别是数据在十几行,几十行时的情况下。写正则表达式要注意观察原始文本的特征,很多情况下,我们并不需要写出很完整的正则表达式,够用即可。比如在例1中,正则表达式(\S+)\s+(\S+)中的第二个(\S+)匹配URL,在这种文本环境下只要一个(\S+)就可以了,不需要写出一堆完整的正则表达式去匹配URL。
这里仅起一个抛砖引玉的作用,我就是想通过它说明,正则表达式不仅仅是一种技术,更是一种“思维模式”,它会在你一次次使用后升华为思想的一部分。
柳永法
2010.8.8
http://www.yongfa365.com/
[①] 关于正则表达式的基本语法,请参看第20章。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 【杂谈】分布式事务——高大上的无用知识?