微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

我知道这个问题似乎很愚蠢,但不是这样.我的意思是它究竟是什么我对解析问题有一个很好的理解.我知道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正则表达式定义了“非正规”语言,但这是一个单独的问题.)

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

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

原文地址:https://www.jb51.cc/regex/357147.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐