正则表达式 – 什么是正则表达式?
我知道这个问题似乎很愚蠢,但不是这样.我的意思是它究竟是什么我对解析问题有一个很好的理解.我知道BNF / EBNF,我在我的一所大学课程中写了语法来解析简单的无上下文语言.我从来没有遇到过正则表达式!我唯一记得的是,无上下文的语法可以执行正则表达式可以做的一切.
另外,对于一般的编码来解析字符串是否有用?一个简单的例子将是有帮助的.
正则表达式首先出现在数学和自动机理论中.正则表达式仅仅是定义了一个
regular language的东西.没有太多的“正规”的意思,就像这样想一种语言:
一种语言由字符串组成.例如,英语是一种语言,它由字符串组成. 所以你可以有一个字符串(这是记住,只是一个符号的连接),它不是给定语言的一部分.或者它可能是在语言. 所以让我们说你有一个由2个符号组成的字母:“0”和“1”.并且让我们说你想使用该字母表中的符号创建一种语言.您可以创建以下规则:“为了使用我的语言字符串,它必须只有0和1. 所以这些字符串是你的语言: > 0 这些不会用你的语言: > 2 这是一个很简单的语言.这样做:“用我的语言,每个字符串(类似于英文中的一个有效的单词)必须为0,然后可以跟随任何数字的0或1的” 这些语言是: > 0222221 这些不是: > 1 而不是使用单词定义语言 – 而这些语言可能会变得非常复杂(“1后跟2 0”,之后是1和0的结尾以1“),我们提出了这种称为”正则表达式“的语法定义语言. 第一种语言本来是: (0 | 1)* (0或1,无限重复) 下一个:0(0 | 1)* (0,后跟0和1的任意数). 所以让我们想一下编程.当你创建一个正则表达式时,你在说“看这个文本,回到我匹配这个模式的字符串”.这是真的说“我已经定义了一种语言.”把本文中的所有字符串返回给我,这是我的语言. 所以当你创建一个“正则表达式”时,你实际上是定义一个常规语言,这是一个数学概念. (实际上,perl-like正则表达式定义了“非正规”语言,但这是一个单独的问题.) 通过学习正则表达式的语法,您正在学习如何创建语言的内容,以便稍后可以看到给定的字符串是否为“语言”.因此,人们通常会说,正则表达式是用于模式匹配的,这基本上是你在看一个模式时所做的,看看它是否符合你的语言规则. (这很长,它是否回答你的问题?) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |