简单入门正则表达式 - 第二章 正则表达式应用范围

一、Windows下的findstr命令

在正则表达式中,最常用的功能就是字符串匹配,现在,让我们实地考察一下它的具体应用。Windows 系统中,有一个叫做 findstr 的命令,它的作用就是能够辅助我们在文件中查找指定的字符串。

首先需要打开 Windows 命令提示符,然后键入 findstr /?,就能看到 findstr 命令的相关帮助信息,如下图所示:

findstr帮助信息截图

findstr 帮助分为两个部分,第一个部分是该工具的附加参数,通过这些参数我们可以制定匹配模式、打印风格等内容;第二个部分是 findstr 所支持的表达式参考。在指定命令参数时,除非使用了 /C 前缀,否则要使用空格隔开搜索字符串。例如:FINDSTR "hello there" x.y就是在文件“x.y”中寻找字符串“hello”或“there”;FINDSTR /C:"hello there" x.y在文件“x.y”寻找字符串“hello there”。

现在让我们做个小实验,首先在 C 盘下准备三个空的文本文件,并在第二个和第三个文件中分别写上“正则表达式测试用例 => II”和“正则表达式测试用例 => III”。然后打开命令提示符,并把路径切换到测试文件所在的目录,执行命令findstr /N "/<正则.*" *.txt > 查询结果.txt,这时的查询结果就是:

“新建文本文档 (2).txt:3:正则表达式测试用例 => II新建文本文档 (3).txt:1:正则表达式测试用例 => III”。

从 findstr 的帮助中可以了解到,“/N”的作用是打印匹配到的行的行号;由双引号夹起来的内容就是我们要进行匹配的字符串,“/<”表示字开始,紧接着是“正则”两个汉字,后面的点是一个通配符,它能与任意字符相匹配,星号表示它前面的字符可以重复零次到多次,这里要注意的是,正则表达式部分的参数要用双引号夹起来;“*.txt”指明当前路径下要查找的所有文件;最后的“> 查询结果.txt”可以把 findstr 命令执行完的结果放到文本文件“查询结果”中去。

二、Unix...

三、文本编辑器 EmEditor

在做文本处理时,使用正则表达式会帮助我们节省很多时间。假设现在我们接到一个要删除满足某一样式的字符串的任务,具体工作内容是把以大写字母开头单词、数字和符号这样的字符从文本中去除。如果用人工手动的方法进行处理,那会很浪费时间的,而且处理的结果也不一定让人满意,但是有了正则表达式的帮忙,一切都会变得很轻松。

首先编写一个匹配以大写字母开头的单词或数字或符号的正则表达式,然后查找到所有满足条件的内容,当发现有匹配的内容时,EmEditor 就会把满足条件的字符串高亮显示。

在我们确认匹配的内容准确无误后,就可以使用“全部替换”功能把满足条件的字符串替换成字符串以达到删除的目的,任务就能轻松地完成!

四、开发工具 eclipse

在做 Java 开发时常用的开发工具 eclipse 为我们提供了支持正则表达式的文件搜索功能。当要从整个工程中找出所有用到的常量字符串,就可以在查找的内容中输入"(//"|.)+,并点击“Search”就能找到符合条件的文件。每找到一个文件,它都会被显示在搜索的结果栏里,当双击检索到的文件后,匹配内容就会在代码区域高亮显示出来。

五、程序语言中的正则表达式数据校验

在 Web 开发中,常常会遇到数据验证各种类型的数据校验。下面我们来看一个用JavaScript验证邮件地址的例子。

如上图设计一个电子邮件输入框和一个校验按钮,当用户录入完邮箱地址后,便可以点击校验按钮进行验证,下面是完整的实现代码。其实这里关键的地方只有两处,首先是构造一个校验用的正则表达式 pattern,然后调用目标字符串 mailText 的 match 方法来进行判断用户录入的邮箱地址是否满足 pattern 的格式。

  1. <html>
  2. <head>
  3. <title>Mail Address Check</title>
  4. <script language="javascript">
  5. function validateMail(mailText) {
  6. var canvas = document.getElementsByTagName("body")[0];
  7. var pattern = /^[A-Z0-9._%-]+@[A-Z0-9.-]+/.[A-Z]{2,4}$/i;
  8. if ( mailText.match(pattern) ) {
  9. canvas.innerHTML = "电子邮箱地址格式合法。";
  10. } else {
  11. canvas.innerHTML = "<font color='red'>电子邮箱地址格式非法!</font>";
  12. }
  13. }
  14. </script>
  15. </head>
  16. <body>
  17. <form id="form1" name="form1" method="post" action="">
  18. <label>邮箱地址:
  19. <input type="text" name="mailBox" />
  20. </label>
  21. <button onclick="validateMail(this.form.mailBox.value)">验证</button>
  22. </form>
  23. </body>
  24. </html>

其实,不光可以在 Web 开发的 JavaScript 中使用正则表达式,在很多应用程序中,正则表达式表现的同样很优秀。现在我们编写一个文件名过滤的小程序,它的主要功能是根据指定的目录和文件样式,输出该目录下满足条件的所有文件名称。

  1. package info.knightrcom;
  2. import java.io.File;
  3. import java.io.FilenameFilter;
  4. /**
  5. * @author KNIGHTRCOM
  6. *
  7. */
  8. public class FilenameOutput {
  9. /**
  10. * 接受文件名的起始字符和终止字符,并打印出指定目录下满足条件的文件名称。
  11. *
  12. * @param dir
  13. * 目标目录
  14. * @param startChars
  15. * 起始字符
  16. * @param endChars
  17. * 终止字符
  18. */
  19. public static void listFiles(String dir, String startChars, String endChars) {
  20. File file = new File(dir);
  21. final String pattern = "^" + startChars + ".*" + endChars + "$";
  22. // 得到满足指定样式的文件名称
  23. File[] files = file.listFiles(new FilenameFilter() {
  24. public boolean accept(File dir, String name) {
  25. return name.matches(pattern);
  26. }
  27. });
  28. // 输出文件名称
  29. for (File eachFile : files) {
  30. System.out.println(eachFile.getName());
  31. }
  32. }
  33. }

六、正则表达式在数据库中的应用

SQL 标准中所提供的 LIKE 字句能让我们进行模糊查询,但是它的功能很单一,有时候并不能很好地帮助我们解决问题。为了弥补这一缺憾,大多数数据库厂商都对标准的 SQL 进行了不同程度的补充,MySql 就是其中的一个。MySql5 中允许我们在 SQL 中使用正则表达式进行数据过滤(旧版本并不具有这样的功能)。

当登录到 MySql 数据库后,可以使用SHOW DATABASES;命令来查看当前 DBMS 中的所有数据库;接下来用USE information_schema;选取要操作的数据库;在数据库 information_schema 中,有一张名为 TABLES 的数据表, 我们的任务就是要从 TABLES 的 TABLE_NAME 字段中把那些不含字母 T 的表名称检索出来。

MySql 提供了一个名为 REGEXP 的操作符,在操作符的左边是目标字符串,右边就是正则表达式样式。所以,构造出的过滤内容就是“SELECT TABLE_NAME REGEXP '^[^T]+$'”,下图是整个操作过程。

七、专业的正则表达式工具

在我们初学正则表达式的时候,有很多东西掌握得不是那么牢靠,这时候有一个辅助性工具往往能帮我们解决很多问题。Expresso 和 Regex Buddy 都是很优秀的正则表达式教学软件,它们有着良好的界面,能帮助我们分析并调试正则表达式语法;其中还内置一些常用的正则表达式,这对初学者来说,是相当不错的学习资源。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值