>>分享Java编程技术,对《Java面向对象编程》等书籍提供技术支持 书籍支持  卫琴直播  品书摘要  在线测试  资源下载  联系我们
发表一个新主题 开启一个新投票 回复文章 您是本文章第 21900 个阅读者 刷新本主题
 * 贴子主题:  正则表达式基础入门 回复文章 点赞(0)  收藏  
作者:flybird    发表时间:2020-01-30 13:38:04     消息  查看  搜索  好友  邮件  复制  引用

  

正则表达式基础入门

除非您以前使用过正则表达式,否则您可能不熟悉一些术语。但是,毫无疑问,您已经使用过不涉及脚本的某些正则表达式概念。

例如,您很可能使用  ? 和  * 通配符来查找硬盘上的文件。 ? 通配符匹配文件名中的 0 个或 1 个字符,而  * 通配符匹配零个或多个字符。像  data(\w)?\.dat 这样的模式将查找下列文件:

data.dat

data1.dat

data2.dat

datax.dat

dataN.dat

使用  * 字符代替  ? 字符扩大了找到的文件的数量。 data.*\.dat 匹配下列所有文件:

data.dat

data1.dat

data2.dat

data12.dat

datax.dat

dataXYZ.dat

尽管这种搜索方法很有用,但它还是有限的。通过理解 * 通配符的工作原理,引入了正则表达式所依赖的概念,但正则表达式功能更强大,而且更加灵活。

正则表达式的使用,可以通过简单的办法来实现强大的功能。下面先给出一个简单的示例:

点击在新窗口中浏览原图
CTRL+鼠标滚轮放大或缩小
  •    ^ 为匹配输入字符串的开始位置。
  •    [0-9]+匹配多个数字,  [0-9] 匹配单个数字, + 匹配一个或者多个。
  •    abc$匹配字母  abc 并以  abc 结尾, $ 为匹配输入字符串的结束位置。
我们在写用户注册表单时,只允许用户名包含字符、数字、下划线和连接字符(-),并设置用户名的长度,我们就可以使用以下正则表达式来设定。

点击在新窗口中浏览原图
CTRL+鼠标滚轮放大或缩小

以上的正则表达式可以匹配 javathinker、javathinker1、java-thinker、thinker_java, 但不匹配 ja,因为它包含的字母太短了,小于 3 个无法匹配。也不匹配 javathinker$, 因为它包含特殊字符。

实例

匹配以数字开头,并以 abc 结尾的字符串:


var   str  =  " 123abc " ;
var   patt1  = /^ [ 0 - 9 ] + abc $/;
document . write ( str . match ( patt1 ) ) ;

以下标记的文本是获得的匹配的表达式:
  123abc

为什么使用正则表达式?

典型的搜索和替换操作要求您提供与预期的搜索结果匹配的确切文本。虽然这种技术对于对静态文本执行简单搜索和替换任务可能已经足够了,但它缺乏灵活性,若采用这种方法搜索动态文本,即使不是不可能,至少也会变得很困难。

通过使用正则表达式,可以:
  • 测试字符串内的模式。

    例如,可以测试输入字符串,以查看字符串内是否出现电话号码模式或信用卡号码模式。这称为数据验证。
  • 替换文本。

    可以使用正则表达式来识别文档中的特定文本,完全删除该文本或者用其他文本替换它。
  • 基于模式匹配从字符串中提取子字符串。

    可以查找文档内或输入域内特定的文本。
例如,您可能需要搜索整个网站,删除过时的材料,以及替换某些 HTML 格式标记。在这种情况下,可以使用正则表达式来确定在每个文件中是否出现该材料或该 HTML 格式标记。此过程将受影响的文件列表缩小到包含需要删除或更改的材料的那些文件。然后可以使用正则表达式来删除过时的材料。最后,可以使用正则表达式来搜索和替换标记。

发展历史

正则表达式的"祖先"可以一直上溯至对人类神经系统如何工作的早期研究。Warren McCulloch 和 Walter Pitts 这两位神经生理学家研究出一种数学方式来描述这些神经网络。

1956 年, 一位叫 Stephen Kleene 的数学家在 McCulloch 和 Pitts 早期工作的基础上,发表了一篇标题为"神经网事件的表示法"的论文,引入了正则表达式的概念。正则表达式就是用来描述他称为"正则集的代数"的表达式,因此采用"正则表达式"这个术语。

随后,发现可以将这一工作应用于使用 Ken Thompson 的计算搜索算法的一些早期研究,Ken Thompson 是 Unix 的主要发明人。正则表达式的第一个实用应用程序就是 Unix 中的 qed 编辑器。

如他们所说,剩下的就是众所周知的历史了。从那时起直至现在正则表达式都是基于文本的编辑器和搜索工具中的一个重要部分。

应用领域

目前,正则表达式已经在很多软件中得到广泛的应用,包括 *nix(Linux, Unix等)、HP 等操作系统,PHP、C#、Java 等开发环境,以及很多的应用软件中,都可以看到正则表达式的影子。



命令或环境
.
[ ]
^
$
\( \)
\{ \}
?
+
|
( )
vi





         
Visual C++





         
awk




  awk是支持该语法的,只是要在命令

行加入 --posix or --re-interval参数即可,可见

man awk中的interval expression




sed






       
delphi





 



python






java






√  √ 
javascript





 



php





         
perl





 



C#




   







程序猿的技术大观园:www.javathinker.net



[这个贴子最后由 flybird 在 2020-02-02 12:34:24 重新编辑]
  Java面向对象编程-->Lambda表达式
  JavaWeb开发-->开发JavaMail Web应用
  JSP与Hibernate开发-->映射组成关系
  Java网络编程-->对象的序列化与反序列化
  精通Spring-->通过Axios访问服务器
  Vue3开发-->组合(Composition)API
  求素数
  BIO和NIO区别
  JDK自带JVM调优工具的用法
  被迫重构代码,这次我干掉了 if-else
  面试问我,创建多少个线程合适?我该怎么说
  volatile 实现原理
  分布式锁的原理和实现
  超详细的Java运算符修炼手册(优秀程序员不得不知道的运算技...
  Synchronized与ReentrantLock区别总结
  Eclipse使用指南:Debug 配置
  Java设计模式:观察者模式
  Java入门实用代码:查看线程是否存活
  Java入门实用代码:修改链表LinkedList
  Java入门实用代码:向文件写入字符串
  通过Java读取Excel数据
  更多...
 IPIP: 已设置保密
楼主      
1页 0条记录 当前第1
发表一个新主题 开启一个新投票 回复文章


中文版权所有: JavaThinker技术网站 Copyright 2016-2026 沪ICP备16029593号-2
荟萃Java程序员智慧的结晶,分享交流Java前沿技术。  联系我们
如有技术文章涉及侵权,请与本站管理员联系。