首页 > 编程语言 >从编程语言的角度来理解正则表达式

从编程语言的角度来理解正则表达式

时间:2023-09-01 22:34:30浏览次数:33  
标签:字符 范式 编程语言 正则表达式 编程 角度 匹配 程序代码

程序代码是对现实事物处理逻辑的抽象,而正则表达式,则是对复杂的字符匹配程序代码的进一步抽象;也就是说,高度简洁的正则表达式,可以认为其背后所对应的,是字符匹配程序代码,而字符匹配程序代码,背后对应的是字符匹配处理逻辑。

字符匹配处理逻辑,可以抽象为字符匹配程序代码;字符匹配程序代码,可以再进一步,抽象为高度简洁的正则表达式。

从编程语言的角度来理解正则表达式_正则表达式

相对于字符匹配程序代码,正则表达式不需要使用 if、then、else 等关键字,也不需要调用 find、showMessage 等函数,这些在正则表达式中都已经隐含了。也就是说,正则表达式解析引擎,会自动按类似逻辑进行解析,这也就是正则表达式“高度简洁”的体现。

编程语言的发展历程:从编程语言的角度来理解正则表达式_正则表达式_02

从编程语言的角度来理解正则表达式_正则表达式_03

程序员主要负责分析问题,以及使用第 4 代语言来描述问题,而无需花费大量时间,去考虑具体的处理逻辑和算法实现,处理逻辑和算法实现是由编译器(Compiler)或解释器(Interpreter)这样的语言解析引擎来负责的。

编程范式(Programming Paradigm),指的是计算机编程中的基本风格和典范模式,是程序员在其所创造的程序虚拟世界中自觉不自觉地所采用的世界观和方法论。

常见的编程范式大致上有:命令式、声明式(包括了函数式、逻辑式等)、面向对象式、泛型式、并发式、切面式等。每种编程范式都引导着程序员,根据其特有的倾向(即世界观)和思路(即方法论)去分析和解决编程问题。

1、命令式编程

命令式编程范式,主要就是模拟电脑运算的过程。更进一步地来说,是直接模拟目前主流的冯·诺依曼机(Von Neumann Machine)的运算过程,是对冯·诺伊曼机运行机制的抽象。

冯·诺伊曼机的基本特点是,在程序计数器的集中控制下,按顺序依次从内存中获取指令和数据,然后进行执行,因此它是以控制驱动的控制流方式工作的。与冯·诺依曼机相对应的还有以数据驱动的数据流方式工作的数据流机,以及以需求驱动的数据流方式工作的归约机等。

采用命令式编程范式的程序,是由若干行动指令所组成的有序指令列表,也就是由一系列指明执行顺序的祈使句——“先做这,再做那”所组成,属于行动导向,强调的是定义问题的解法——即“怎么做”,因而算法是显性的而目标是隐性的。因此,从编程范式的角度来看:

  • 命令式编程的世界观是:程序是由若干行动指令组成的有序列表;
  • 命令式编程的方法论是:用变量来存储数据,用语句来执行指令。

2、声明式编程范式

声明式编程范式,主要是模拟人脑思维的过程。声明式重目标、轻过程,专注问题的分析和表达,而不是算法实现。它不用指明执行顺序,属于目标导向,强调的是定义问题的描述——即“做什么”,因而目标是显性而算法是隐性的。

从编程范式的角度来看:声明式编程的世界观是:

  • 程序是由若干目标任务组成的有序列表;
  • 声明式编程的方法论是:用语法元素来描述任务,由解析引擎转化为指令并执行。

声明式编程的代表语言为 SQL、SAS、SPSS、LaTeX、Regex(即正则表达式)等。

正则从编程范式的角度上来看,其实是属于声明式编程范式,并且是专用于处理文本查找匹配这个特定领域的专门语言。

正则表达式中的语法元素——元字符、元转义序列与特殊结构,可理解为某种具体的程序逻辑和算法的体现。注意,这里提到的元转义序列,指的是相对于将元字符转义为字符本义的普通转义序列来说的。


标签:字符,范式,编程语言,正则表达式,编程,角度,匹配,程序代码
From: https://blog.51cto.com/key3feng/7326816

相关文章

  • Java是一种广泛使用的面向对象编程语言
    Java是一种广泛使用的面向对象编程语言,具有以下特性:平台无关性:Java语言编写的程序可以在不同的操作系统和硬件平台上运行,因为Java语言通过Java虚拟机(JVM)实现了平台无关性。面向对象:Java是一种完全面向对象的编程语言,支持封装、继承和多态等面向对象的基本特性。强类型语言:Java是一......
  • 验证邮箱的正则表达式
    Stringpat="^([a-z0-9A-Z]+[-|\\.]?)+[a-z0-9A-Z]@([a-z0-9A-Z]+(-[a-z0-9A-Z]+)?\\.)+[a-zA-Z]{3,}$"; Patternp=Pattern.compile(pat); Matcherm=p.matcher(email); //邮箱格式不对 if(!m.matches()){ Toast.makeText(context,"邮箱格式不正......
  • 正则表达式
    说明正则表达式(RegularExpression,简称为regex或regexp)是一种用于描述、匹配和操作字符串模式的工具。它是一种强大的文本处理工具,用于在字符串中查找、替换、分割和验证特定模式的文本。正则表达式由一系列字符和特殊字符组成,用于构建一个模式,该模式描述了你想要匹配的字符......
  • 记录一下正则表达式
    importre#1.findall(pattern,string)从字符串中找到所有符合正则表达sh的数据#pattern:正则表达式,string:要匹配的字符串#匹配到数据后,返回一个列表,列表中存放的是匹配到的数据f=re.findall('ab','abc')print(f)f1=re.findall('00000','abc')print(f1)f2=re.findall......
  • 智能正则表达式生成: Regex.ai助您编写更便捷的匹配规则
    正则表达式是一种强大的文本匹配工具,然而,对于许多人来说,学习和编写正则表达式却是一项相对复杂的任务。为了让正则表达式编写更加智能化和高效,Regex.ai应运而生。本文将深入介绍Regex.ai的作用以及其在正则表达式编写领域的价值。1.Regex.ai服务简介Regex.ai是一款基于人工智能......
  • 编程语言的分类
    最早的时候,0和1就是编程语言.......机器语言优点:执行代码效率非常快缺点:开发效率低汇编语言然后通过写英文字符的形式代替了写0和1,但是他还是直接和硬件交互(了解)优点(相对于机器语言):开发效率高缺点(相对于机器语言):执行效率低高级语言printf("helloworld")翻译001010011010......
  • 正则表达式笔记 str.replace+re.sub
    原内容#正则表达式:#(?i)表示接下来的匹配将不区分大小写#.*表示匹配任意字符(除了换行符)零次或多次#(.*)保存捕获的结果,即保存匹配到-h.*之前的全部内容#将字符串元素中(-小写字母)替换为空字符self.df_投料['倒卷前......
  • r'\1'表示替换字符串中的第一个捕获组 将匹配到的字符串被替换为第一个捕获组的内容
    请解释pd.Series.str.replace(pat=r'(?i)(.*)-h.*',#(.*)表示一个捕获组repl=r'\1',#将匹配到的字符串被替换为捕获组的内容regex=True)中r'\1'的作用在pd.Series.str.replace()函数中,r'\1'表示替换字符串中的第一个捕获组......
  • 剑指 Offer 19. 正则表达式匹配(困难)
    题目:classSolution{public:boolisMatch(strings,stringp){intm=s.size()+1,n=p.size()+1;vector<vector<bool>>dp(m,vector<bool>(n,false));//设动态规划矩阵dp,dp[i][j]代表字符串s的前i个字dp[0][0]=......
  • 正则表达式判断号码靓号类型
    正则表达式判断号码靓号类型战国墨竹于 2018-04-2010:38:35 发布6962 收藏 14分类专栏: php 正则 php同时被2个专栏收录95篇文章0订阅订阅专栏正则3篇文章0订阅订阅专栏靓号检测:主要可以检测连号(正连12345、倒连65432)、AABB号、手......