zoukankan      html  css  js  c++  java
  • [翻译系列]正则表达式简介

    正则表达式

    本文翻译自英文博客,来源链接请戳这里

    正则表达式简介

    正则表达式是用来表达字符串集合的符号标记(符号标记串)。当特定的字符串符合正则表达式所描述的字符串集合的规则时,通常我们说该字符串和该正则表达式所匹配(match)。

    最简单的正则表达式是单个字面意思的字符。例如a、b、c、1、2、3这样的字符,不同于*+?()|这样的元字符,非元字符表示他们本身。也就是模式(pattern)串"a"仅仅匹配字符串"a"。换句话说,该模式串描述的字符串集合仅仅表示集合{"a"},仅此而已。如果我们想要表示元字符本身,使用转义字符。例如我们可以使用+来表示字面意思的+字符。因此,如果我们想要匹配本身,那么需要使用\

    正则表达式之间可以做一定的运算从而形成新的正则表达式。这样的运算包括alternated或者concatenated。假如e1能够匹配到s并且e2能够匹配t。那么e1|e2s或者t匹配,而e1e2st匹配。

    元字符*,+?用来表示操作的重复运算。e1*能够匹配到一连串的(零次或零次以上,匹配到的字符有可能不同,但是都在该模式描述的字符串集合里)字符串。同理的,e1+匹配一次或者一次以上,e1?描述零次或者一次的匹配。

    上述元字符的运算遵循一定的优先级规则。从最弱到最强的绑定,分别为alternation,之后为concatenation,最后是重复运算符。显时的括号可以用来强制改变运算顺序。例如:表达式ab|cd同表达式(ab)|(cd)表示相同的意思,而ab*同表达式a(b*)意思相同。

    截止目前介绍的语法,同传统的Unix egrep正则表达式语法保持一致。这一子集已经能够基本上描述所有的正则语言了。不严格的讲,正则表达式能够表示特定的字符串集合,通过使用有限容量的内存,单趟就能够完成匹配。在其他的一些编程语言里,例如Perl,添加了一些新的操作或者转义序列,他们有的使正则表达式更简介直观了,但有些也使得表达式更晦涩难懂了,但这些新的操作转移序列都没有使正则表达式(实现)更强大。

  • 相关阅读:
    反向传播错漏百出小推导
    使用git遇到的
    Cost Function in Logistic Regression and Neural Network
    鼠标左键长按功能的实现
    同类控件的统一操作(以TCHECKBOX为例)
    HLP帮助文件源文件RTF文件的编写
    FORMAT 的用法
    DELPHI6中DSGNINTF.DCU找不到时的解决方法
    使窗体处于可“移动”,可改变“大小”状态中
    系统菜单的控制,使菜单项灰显及恢复功能
  • 原文地址:https://www.cnblogs.com/zhangshoulei/p/14632049.html
Copyright © 2011-2022 走看看