正则表达式

基于Simulink/Matlab的VSG并网系统单相接地与相间短路故障仿真建模与特性分析 本文详细介绍了基于Simulink/Matlab搭建虚拟同步发电机(VSG)并网系统仿真模型的方法,并重点分析了单相接地与相间短路故障下的系统特性。通过设置三相故障模块参数,模拟了故障发生时的电压、电流变化及VSG动态响应,为理解故障机理、优化控制策略及设计继电保护提供了仿真依据与实践指导。 阅读详情
 Perl 中的正则表达式
正则表达式的三种形式


正则表达式中的常用模式


正则表达式的 8 大原则


  


      正则表达式是 Perl 语言的一大特色,也是 Perl 程序中的一点难点,不过如果大家能够很好的掌握他,就可以轻易地用正则表达式来完成字符串处理的任务,当然在 CGI 程序设计中就更能得心应手了。下面我们列出一些正则表达式书写时的一些基本语法规则。




--------------------------------------------------------------------------------


9.1 正则表达式的三种形式
首先我们应该知道 Perl 程序中,正则表达式有三种存在形式,他们分别是:


匹配:m/<regexp>;/ (还可以简写为 /<regexp>;/ ,略去 m)


替换:s/<pattern>;/<replacement>;/


转化:tr/<pattern>;/<replacemnt>;/


这三种形式一般都和 =~ 或 !~ 搭配使用(其中 "=~" 表示相匹配,在整条语句中读作 does,"!~" 表示不匹配,在整条语句中读作 doesn't),并在左侧有待处理的标量变量。如果没有该变量和 =~ !~ 操作符,则默认为处理 $_ 变量中的内容。举例如下:


$str = "I love Perl";
$str =~ m/Perl/; # 表示如果在 $str 中发现 "Perl" 字符串,则返回 "1" 否则返回 "0"。
$str =~ s/Perl/BASH/; # 表示将变量 $str 中的 "Perl" 字符串替换为 "BASH",如果发生此替换则返回 "1",否则返回 "0"。
$str !~ tr/A-Z/a-z/; # 表示将变量 $str 中的所有大写字母转化为小写字母,如果转化发生了则返回 "0",否则返回 "1"。


另外还有:


foreach (@array) { s/a/b/; } # 此处每次循环将从 @array 数组中取出一个元素存放在 $_ 变量中,并对 $_ 进行替换处理。
while (<FILE>;) { print if (m/error/); } # 这一句稍微复杂一些,他将打印 FILE 文件中所有包含 error 字符串的行。


Perl 的正则表达式中如果出现 () ,则发生匹配或替换后 () 内的模式被 Perl 解释器自动依次赋给系统 $1, $2 ...... 请看下面的例子:


$string = "I love perl";
$string =~ s/(love)/<$1>;/; # 此时 $1 = "love",并且该替换的结果是将 $string 变为 "I <love>; perl"
$string = "i love perl";
$string =~ s/(i)(.*)(perl)/<$3>;$2<$1>;/; # 这里 $1 = "i",$2 = " love ",$3 = "perl",并且替换后 $string 变为 "<perl>; love <i>;"


替换操作 s/<pattern>;/<replacement>;/ 还可以在末尾加上 e 或 g 参数,他们的含义分别为:


s/<pattern>;/<replacement>;/g 表示把待处理字符串中所有符合 <pattern>; 的模式全部替换为 <replacement>; 字符串,而不是只替换第一个出现的模式。
s/<pattern>;/<replacement>;/e 表示将把 <replacemnet>; 部分当作一个运算符,这个参数用的不多。


比如下面的例子:


$string = "i:love:perl";
$string =~ s/:/*/; #此时 $string="i*love:perl";
$string = "i:love:perl";
$string =~ s/:/*/g; #此时 $string="i*love*perl";
$string =~ tr/*/ /; #此时 $string="i love perl";
$string = "www22cgi44";
$string =~ s/(/d+)/$1*2/e; # (/d+)代表 $string 中的一个或多个数字字符,将这些数字字符执行 *2 的操作,因此最后 $string 变成了 "www44cgi88"。


下面给出一个完整的例子:


#!/usr/bin/perl


print"请输入一个字符串!/n";
$string = <STDIN>;; # <STIDN>;代表标准输入,会让使用者输入一字符串
chop($string); # 将$string最后一个换行的字符/n删除掉
if($string =~ /perl/){
  print("输入的字符串中有 perl 这个字符串!/n";
}


如果输入的字符串含有 perl 这个字符串的话,就会显示后面的提示信息。






9.2 正则表达式中的常用模式
下面是正则表达式中的一些常用模式。


/pattern/  结果  
. 匹配除换行符以外的所有字符
x? 匹配 0 次或一次 x 字符串
x* 匹配 0 次或多次 x 字符串,但匹配可能的最少次数
x+ 匹配 1 次或多次 x 字符串,但匹配可能的最少次数
.* 匹配 0 次或一次的任何字符
.+ 匹配 1 次或多次的任何字符
{m} 匹配刚好是 m 个 的指定字符串
{m,n} 匹配在 m个 以上 n个 以下 的指定字符串
{m,} 匹配 m个 以上 的指定字符串
[] 匹配符合 [] 内的字符
[^] 匹配不符合 [] 内的字符
[0-9] 匹配所有数字字符
[a-z] 匹配所有小写字母字符
[^0-9] 匹配所有非数字字符
[^a-z] 匹配所有非小写字母字符
^ 匹配字符开头的字符
$ 匹配字符结尾的字符
/d 匹配一个数字的字符,和 [0-9] 语法一样
/d+ 匹配多个数字字符串,和 [0-9]+ 语法一样
/D 非数字,其他同 /d
/D+ 非数字,其他同 /d+
/w 英文字母或数字的字符串,和 [a-zA-Z0-9] 语法一样
/w+ 和 [a-zA-Z0-9]+ 语法一样
/W 非英文字母或数字的字符串,和 [^a-zA-Z0-9] 语法一样
/W+ 和 [^a-zA-Z0-9]+ 语法一样
/s 空格,和 [/n/t/r/f] 语法一样
/s+ 和 [/n/t/r/f]+ 一样
/S 非空格,和 [^/n/t/r/f] 语法一样
/S+ 和 [^/n/t/r/f]+ 语法一样
/b 匹配以英文字母,数字为边界的字符串
/B 匹配不以英文字母,数值为边界的字符串
a|b|c 匹配符合a字符 或是b字符 或是c字符 的字符串
abc 匹配含有 abc 的字符串
(pattern) () 这个符号会记住所找寻到的字符串,是一个很实用的语法。第一个 () 内所找到的字符串变成 $1 这个变量或是 /1 变量,第二个 () 内所找到的字符串变成 $2 这个变量或是 /2 变量,以此类推下去。  
/pattern/i i 这个参数表示忽略英文大小写,也就是在匹配字符串的时候,不考虑英文的大小写问题。
/ 如果要在 pattern 模式中找寻一个特殊字符,如 "*",则要在这个字符前加上 / 符号,这样才会让特殊字符失效




下面给出一些例子:   


范例 说明
/perl/ 找到含有 perl 的字符串
/^perl/ 找到开头是 perl 的字符串
/perl$/ 找到结尾是 perl 的字符串
/c|g|i/ 找到含有 c 或 g 或 i 的字符串
/cg{2,4}i/ 找到 c 后面跟着 2个到 4个 g ,再跟着 i 的字符串
/cg{2,}i/ 找到 c 后面跟着 2个以上 g ,再跟着 i 的字符串
/cg{2}i/ 找到 c 后面跟着 2个 g,再跟着 i 的字符串
/cg*i/ 找到 c 后面跟着 0个或多个 g ,再跟着 i 的字符串,如同/cg{0,1}i/
/cg+i/ 找到 c 后面跟着一个以上 g,再跟着 i 的字符串,如同/cg{1,}i/
/cg?i/ 找到 c 后面跟着 0个或是 1个 g ,再跟着 i 的字符串,如同/cg{0,1}i/
/c.i/ 找到 c 后面跟着一个任意字符,再跟着 i 的字符串
/c..i/ 找到 c 后面跟着二个任意字符,再跟着 i 的字符串
/[cgi]/ 找到符合有这三个字符任意一个的字符串
/[^cgi]/ 找到没有这三个字符中任意一个的字符串
//d/ 找寻符合数字的字符,可以使用//d+/来表示一个或是多个数字组成的字符串
//D/ 找寻符合不是数字的字符,可以使用//D+/来表示一个或是更多个非数字组成的字符串
//*/ 找寻符合 * 这个字符,因为 * 在常规表达式中有它的特殊意思,所以要在这个特殊符号前加上 / 符号,这样才会让这个特殊字符失效
/abc/i 找寻符合 abc 的字符串而且不考虑这些字符串的大小写






9.3 正则表达式的八大原则
  如果在 Unix 中曾经使用过 sed、awk、grep 这些命令的话,相信对于 Perl 语言中的正则表达式(Regular Expression)不会感到陌生。Perl 语言由于有这个功能,所以对字符串的处理能力非常强。在Perl语言的程序中,经常可以看到正则表达式的运用,在 CGI 程序设计中也不例外。


  正则表达式是初学 Perl 的难点所在,不过只要一旦掌握其语法,你就可以拥有几乎无限的模式匹配能力,而且 Perl 编程的大部分工作都是掌握常规表达式。下面给大家介绍几条正则表达式使用过程中的 8 大原则。


  正则表达式在对付数据的战斗中可形成庞大的联盟——这常常是一场战争。我们要记住下面八条原则:


· 原则1:正则表达式有三种不同形式(匹配(m/ /),替换(s/ / /eg)和转换(tr/ / /))。


· 原则2:正则表达式仅对标量进行匹配( $scalar =~ m/a/; 可以工作; @array =~ m/a/ 将把@array作为标量对待,因此可能不会成功)。


· 原则3:正则表达式匹配一个给定模式的最早的可能匹配。缺省时,仅匹配或替换正则表达式一次( $a = 'string string2'; $a =~ s/string/ /; 导致 $a = 'string 2')。


· 原则4:正则表达式能够处理双引号所能处理的任意和全部字符( $a =~ m/$varb/ 在匹配前把varb扩展为变量;如果 $varb = 'a' $a = 'as',$a =~ s/$varb/ /; 等价于 $a =~ s/a/ /; ,执行结果使 $a = " s" )。


· 原则5:正则表达式在求值过程中产生两种情况:结果状态和反向引用: $a=~ m/pattern/ 表示 $a 中是否有子串 pattern 出现,$a =~ s/(word1)(word2)/$2$1/ 则“调换”这两个单词。


· 原则6:正则表达式的核心能力在于通配符和多重匹配运算符以及它们如何操作。$a =~ m//w+/ 匹配一个或多个单词字符;$a =~ m//d/" 匹配零个或多个数字。


· 原则7:如果欲匹配不止一个字符集合,Perl使用 "|" 来增加灵活性。如果输入 m/(cat|dog)/ 则相当于“匹配字符串 cat 或者 dog。


· 原则8:Perl用 (?..) 语法给正则表达式提供扩展功能。(这一点请同学们课后看相关资料)


想要学习所有这些原则?我建议大家先从简单的开始,并且不断的尝试和实验。实际上如果学会了 $a =~ m/ERROR/ 是在 $a 中查找子串ERROR,那么你就已经比在 C 这样的低层语言中得到了更大的处理能力。
自定义View系列教程04--Draw源码分析及其实践 通过之前的详细分析,我们知道:在measure中测量了View的大小,在layout阶段确定了View的位置。 完成这两步之后就进入到了我们相对熟悉的draw阶段,在该阶段真正地开始对视图进行绘制。按照之前的惯例,我们来瞅瞅View中draw( )的源码 public void draw(Canvas canvas) { final int privateFlags = mPriv 阅读详情

相关推荐

倍福Beckhoff运动控制功能块实战解析:从MC_ReadActualPosition到MC_GearInVelo

本文深入解析倍福(Beckhoff)TwinCAT运动控制功能块,从基础的MC_ReadActualPosition、MC_Power等轴状态读取与使能操作,到MC_MoveAbsolute、MC_MoveRelative等单轴定位指令,并重点剖析了用于动态速度同步的核心功能块MC_GearInVelo在飞锯等场景的应用。文章结合实战经验,详细介绍了齿轮耦合、电子凸轮(MC_CamIn)等高级同步功能的参数配置、调试技巧及常见问题,旨在帮助工程师快速掌握倍福运动控制工具箱,实现复杂的同步工艺。

transformer2023的博客 981

常用正则表达式及其规则

常用规则: 1.^行开始 $行结束 ^ab 以ab开头 ab$ 以ab结尾 2.\将下一个字符标记为一个特殊字符、或一个原义字符、或一个 向后引用、或一个八进制转义符。 例如:\( 匹配一个(括号 3.* 匹配前面的子表达式零次或多次。 例如:ab* 可以匹配 a、b、ab但是不可匹配不包含ab的字符 4.+ 匹配前面的子表达式一次或多次。例如:ab+可以匹配 ab、abb但是不可匹配a、b及不包含ab的字符 5.? 匹配前面的子表达式零次或一次。例如:play(...

yty120的博客 1202

逆向实战:从x-mini签名到RPC调用,Frida动态分析小红书加密协议

本文通过实战案例,详细拆解了小红书App的加密协议逆向分析过程。从识别x-mini签名等关键参数入手,结合静态分析与Frida动态Hook技术,追踪到核心的RPC调用入口,并最终封装成可独立调用的RPC函数,为安全研究和协议理解提供了完整的技术路径。

moss5的博客 1032

正则表达式部分规则

限定符 * 匹配前面的子表达式零次或多次。例如,zo* 能匹配 "z" 以及 "zoo"。* 等价于{0,}。 + 匹配前面的子表达式一次或多次。例如,'zo+' 能匹配 "zo" 以及 "zoo",但不能匹配 "z"。+ 等价于 {1,}。 ? 匹配前面的子表达式零次或一次。例如,"do(es)?" 可以匹配 "do" 、 "does" 中的 "does" 、 "doxy" 中的 "do" 。? 等价于 {0,1}。 {n} n 是一个非负整数。匹配确定的 n 次。例如,'o{2...

larance的挨踢生活 794

Gradient Accumulation 梯度累加/梯度累积 (Pytorch)

我们在训练神经网络的时候,batch_size的大小会对最终的模型效果产生很大的影响。一定条件下,batch_size设置的越大,模型就会越稳定。batch_size的值通常设置在 8-32 之间,但是当我们做一些计算量需求大的任务(例如语义分割、GAN等)或者输入图片尺寸太大的时候,我们的batch size往往只能设置为2或者4,否则就会出现 “CUDA OUT OF MEMORY” 的不可抗力报错。 那么如何在有限的计算资源的条件下,训练时采用更大的batch size...

hxxjxw的博客 5817

人工智能——框架表示法

1975年美国明斯基在“A framework for representing knowledge”提出了框架理论。 1. 框架及框架的一般表示形式 框架:一种描述对象属性的数据结构。 框架的一般表示形式 <框架名> 槽名1: 侧面名1:值1,值2…,值p1 侧面名2:值1,值2…,值p2 侧面名2:值1,值2…,值pm1 槽名2: 侧面名...

weixin_33759269的博客 1642

正则表达式中特殊字符*和+的理解

*:匹配前面的子表达式零次或多次 ‘*’特殊字符的作用是匹配*前面的子表达式零次或多次,这里面的子表达式指的是*前面的一个单元,例如ab*在这里*前面的子表达式指的就是b也就是说在匹配的时候在匹配到a之后,无论后面有没有b无论有几个b都能够匹配成功。 案例: re.findall("ab*","cabbbdaw3abw") 此案例运行的结果为:...

dieyaojing3427的博客 2006

eCognition易康面向对象分类批量选择样本,批量导出shp

可以的,使用这个工具条最右边那个三角尺manual editing toolbar,这是用来直接指定类别的,咱们可以拿它选完以后把指定的类别转成训练样本。另一个好处是,这个选出来的样本可以直接导出成shp,但select sample是不可以的,只能导出TTAMask也就是栅格掩膜。如果要导出shp,要在转之前导出。中间那条有点点的红线就是我的鼠标轨迹,只要碰到的对象就会全部选中,然后一点3的那个按钮就直接全部划分为林地了,十分丝滑。在弹出来的工作条里,首先选择你的类别,比如这里选一个forest。

qq_61845364的博客 4070

正则表达式(9):扩展正则表达式

上图中的扩展正则使用了分组符号”( )”,”(com|net)”表示将括号内的内容看做一个整体,而括号内的内容为”com|net”,它表示”com或者net”,所以,”(com|net)$”就表示以com或者net结尾的行。上图中,grep命令使用了”-E”选项,表示grep命令会把”正则表达式”中的符号当成”扩展正则表达式”去理解,而不再使用默认的”基本正则表达式”。5、顶级域名之前必须包含一个”点”,换句话说就是,邮箱必须以”.com”、”.net”、”.org”、”.edu”结尾。

qq_40531442的博客 2174

CUDA&PCL 点云体素下采样

CUDA&PCL 点云体素下采样

dayuhaitang1的博客 1268

Autosar软件组件分析及ARXML文件分析

Autosar软件组件分析及ARXML文件分析

专注汽车软件开发、AutoSAR、车载以太网、SOA、EE架构。 3602

Python正则表达式

正则表达式是对字符串提取的一套规则,我们把这个规则用正则里面的特定语法表达出来,去匹配满足这个规则的字符串。正则表达式具有通用型,不仅python里面可以用,其他的语言也一样适用。正则表达式是一个特殊的字符序列,它能帮助你方便的检查一个字符串是否与某种模式匹配,常用的有都可以用于匹配字符串。

2301_81704383的博客 1324

MinerU在线API异步调用代码开发示例

本文展示了如何使用Python异步编程调用MinerU在线API进行文件批量上传。代码示例包含三个主要功能:1) 通过API密钥获取文件上传URL;2) 使用信号量控制并发上传多个文件;3) 获取提取结果。实现采用httpx异步客户端和asyncio库,支持文件存在性检查、错误处理和日志记录。示例中演示了如何上传PDF文件到MinerU平台,并提供了获取批量处理结果的接口。该代码可作为异步调用MinerU API的参考实现。

拥抱具身智能,昇腾Ascend C 352

linux正则表达式,正则表达式分类,元字符,基础正则表达式,扩展正则表达式,正则表达式案例

上文介绍了通配符1,本文介绍、总结和通配符有着诸多共同点的一类符号,即正则表达式(regular expression)。只是通配符的对象是文件、或目录,而后者对象是文本内容。在很多地方都有正则表达式的身影,它的作用是用来匹配指定式样的内容,个人理解为,正则表达式规定了指定式样pattern,能匹配该指定式样的字符或字符串即为内容,内容的来源可以是文件、某个标准输入等,使用正则表达式(regular expression)的目的就是匹配到了该内容。

有人说学习`这个`最好的时间是十年前,有人说最好的时间是现在,众说纷纭... 1821

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

shell 正则表达式详解

什么是正则表达式;为什么使用正则表达式;如何使用正则表达式;基本正则表达式;扩展正则表达式; 包含正则表达式例题。

weixin_48814356的博客 3003

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

regex 正则表达式

regex 正则表达式 文章目录regex 正则表达式前言元字符abc 等普通字符| 符号两侧的正则均能匹配. 匹配任意一个字符 '\n'除外^ 匹配字符串开头$ 匹配字符串结尾* 匹配重复0次或多次+ 匹配重复1次或多次? 匹配重复0次或1次{N} 匹配重复指定次数{M,N} 匹配重复指定次数范围[abcd] 字符集匹配[^ ...] 字符集不匹配\d 匹配任意数字字符\D 匹配任意非数字字...

weixin_40118971的博客 6476

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

linux正则表达式大全,正则表达式,正则表达式语法大全

正则表达式,正则表达式语法大全正则表达式分为两类:基本正则表达式:BRE扩展正则表达式:ERE基本正则表达式的元字符:字符匹配:.: 匹配任意单个字符;[]: 匹配指定范围内的任意单个字符[^]:匹配指定范围外的任意单个字符[:digit:],[:upper:],[:lower:],[:alpha:],[:alnum:],[:space:],[:punct:]匹配次数:用在要指定次数的字符后面,...

weixin_32955259的博客 2878

【正则表达式】{1} ——正则表达式的语法

参考资料:Python网络爬虫与信息提取(北京理工大学慕课) 正则表达式的语法: 正则表达式语法由字符和操作符构成 正则表达式的常用操作符: 操作符 说明 实例 . 表示任何单个字符 [ ] 字符集,对单个字符给出取值范围 [abc]表示a、b、c,[a-z]表示a到z单个字符 [^ ] 非字符集,对单个字符给出排除范围 [^abc]表示非a或b或c的单个字符 ...

Giyn 4783

正则表达式总结

每次使用到正则表达式的时候都要去翻书或者去网上查,很麻烦,抽出点时间做一个总结,方便以后用到的时候查阅。一、正则表达式的几个特殊符号1、^和$两个特殊的符号‘^’和’$’。他们的作用是分别指出一个字符串的开始和结束。例子如下:"^The":表示所有以"The"开始的字符串("There","The cat"等); "of despair$":表示所以以"of despair"结尾的字符串; "^ab

lmb55的专栏 2271
上一篇: 正则表达式
下一篇: 数组
Ftabhb
博客等级 码龄12年 4粉丝 4原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值