正则表达式 – 什么是正则表达式?

我知道这个问题似乎很愚蠢,但不是这样.我的意思是它究竟是什么我对解析问题有一个很好的理解.我知道BNF / EBNF,我在我的一所大学课程中写了语法来解析简单的无上下文语言.我从来没有遇到过正则表达式!我唯一记得的是,无上下文的语法可以执行正则表达式可以做的一切.

另外,对于一般的编码来解析字符串是否有用?一个简单的例子将是有帮助的.

正则表达式首先出现在数学和自动机理论中.正则表达式仅仅是定义了一个 regular language的东西.没有太多的“正规”的意思,就像这样想一种语言:

一种语言由字符串组成.例如,英语是一种语言,它由字符串组成.
>这些字符串由符号组成,称为字母表.因此,字符串只是字母表中的符号的连接.

所以你可以有一个字符串(这是记住,只是一个符号的连接),它不是给定语言的一部分.或者它可能是在语言.

所以让我们说你有一个由2个符号组成的字母:“0”和“1”.并且让我们说你想使用该字母表中的符号创建一种语言.您可以创建以下规则:“为了使用我的语言字符串,它必须只有0和1.

所以这些字符串是你的语言:

> 0
> 1
> 01
> 11001101
> …等

这些不会用你的语言:

> 2
桃子
> 00101105

这是一个很简单的语言.这样做:“用我的语言,每个字符串(类似于英文中的一个有效的单词)必须为0,然后可以跟随任何数字的0或1的”

这些语言是:

> 0111111
> 0000000
> 0101010110001

这些不是:

> 1
> 10000
> 1010
> 2000000

而不是使用单词定义语言 – 而这些语言可能会变得非常复杂(“1后跟2 0”,之后是1和0的结尾以1“),我们提出了这种称为”正则表达式“的语法定义语言.

第一种语言本来是:

(0 | 1)*

(0或1,无限重复)

一个:0(0 | 1)*

(0,后跟0和1的任意数).

所以让我们想一下编程.当你创建一个正则表达式时,你在说“看这个文本,回到我匹配这个模式的字符串”.这是真的说“我已经定义了一种语言.”把本文中的所有字符串返回给我,这是我的语言.

所以当你创建一个“正则表达式”时,你实际上是定义一个常规语言,这是一个数学概念. (实际上,perl-like正则表达式定义了“非正规”语言,但这是一个单独的问题.)

通过学习正则表达式的语法,您正在学习如何创建语言的内容,以便稍后可以看到给定的字符串是否为“语言”.因此,人们通常会说,正则表达式是用于模式匹配的,这基本上是你在看一个模式时所做的,看看它是否符合你的语言规则.

(这很长,它是否回答你的问题?)

相关文章

正则替换html代码中img标签的src值在开发富文本信息在移动端...
正则表达式
AWK是一种处理文本文件的语言,是一个强大的文件分析工具。它...
正则表达式是特殊的字符序列,利用事先定义好的特定字符以及...
Python界一名小学生,热心分享编程学习。
收集整理每周优质开发者内容,包括、、等方面。每周五定期发...