perl模式匹配总结

时间:2022-07-22 05:34:48 其他总结 收藏本文 下载本文

perl模式匹配总结(推荐15篇)由网友“sogasoga”投稿提供,下面小编为大家整理后的perl模式匹配总结,希望大家喜欢!

perl模式匹配总结

篇1:perl模式匹配总结

perl模式匹配总结

一.模式匹配操作符

1.tr/ / / 替换操作符不支持正则表达式 也不具备双引号替换能力

m/ / s/ / / 都支持正则表达式,并且可以提供或限制双引号替换能力(当用单引号作为操作符时则不具备变量替换能力)

s/ / / , tr/ / / 可以用两组不同的括号进行分割,以保证格式清晰s(good)

2.绑定操作符=~ , !~,m/ / s/ / / tr/ / / 都支持

绑定操作符的优先级非常高

3. perl 特有的全局变量

1. $` , $& , $’ 分别存有匹配内容左,匹配内容,匹配内容右的内容

2. 可以用捕获特定的模式 并依次存入$1 $2 $3 中

二.模式修饰词

m/ / s/ / / 和tr/ / / 的修饰词不同

/i 忽略字母大小写 /s /m 允许模式中存在换行符 (一般模式中不允许存在换行符) /x 允许模式中换行,并表明注释,使正则表达式更易读 /o 只编译一次,针对模式中的变量代换 /g 无穷匹配 /e 修饰词把 REPLACEMENT 当作一个 Perl 代码块,而不仅仅是一个替换的字串。执行这段代码后得出的结果当作替换字串使用。 my $str =“hello chinaUnix i am wlj !”;

$str =~ s/(s+)/length($1) == 1 ? $1 :'_'x length($1)/eg;

#$str =~ s/(s{2,})/'_'x length($1)/eg;

print“$str”;

##------结果--------------------

hello_____chinaUnix i am wlj___!

三.m/ / 匹配

1.分隔符

用? 或‘ 作分隔符时有特殊的含义

m?? 表示只匹配一次

m’‘ 表示禁止变量替换和六种转换

2.返回值

标量环境里 匹配成功返回1 ,失败 返回0

列表环境里,返回子字串的列表,并捕获()中的模式

( $key,$value) =~ m/(/w+:(/.*)/ ;

/g 修饰词的返回值

列表环境 : 返回所有匹配字串的'列表

如:my @perls = $string =~ m/perl/ig ;

如果有捕获圆括号,则返回捕获到的字串

如: 用字串$string = “password=xyzzy verbose= 9 score=0”

初始化下面的散列:%hash = {password => “xyzzy”, verbose => 9, socre=>0};

%hash = $string =~ /(/w+)=(/w+)/g ;# 利用列表环境下匹配得到数组,再通 # 过数组对散列hash赋值

标量环境中/g表示一次渐进的匹配,它令perl从上一次匹配停下来的位置开始一次新的匹配 如:while (/perl/g) { print “ $& /n”};

三.s/ / / 操作符(替换)

返回值:

标量环境里返回值是成功替换的次数

替换部分被当作双引号看待可进行变量转换,而且可以使用前半部分模式匹配得到的变量$1,$2,$3 $&,等

新的修饰词

/e 把右边当作一个表达式计算

利用s/ / / 修改字串的用法

1.($newStr = $oldStr)=~ s/good/bad/g

2.替换数组的每一个元素:

For (@newArray,@oldArray) {s/$_/newStr/g}

3.用单程循环对同一个变量重复替换

For ($string) {

s/^/s//; # 丢弃开头的空白

s//s$//; # 丢弃结尾的空白

s//s+//g; # 丢弃中间的空白

4.把逗号放到整数的合理位置

$_ = “12345678”;

1 while s/(/d)(/d/d/d)(?!/d)/$1,$2/;

Print “$_ /n” # 输出:12,345,678

四.Tr/ / / 操作符 (转换)

1.tr 不支持正则表达式 和 变量替换,只是一种单纯的划定范围的替换

尽管不支持变量替换,但可以用eval expr实现

$count = eval “tr/$oldStr/$newStr/”;

Die if $@;

如果仅仅是转换大小写

不要使用tr/ / / 建议使用双引号里的 转移字符/U /L 类似的uc lc 函数

2.修饰词,与m/ / s/ / / 的修饰词不同

/c 与searchlist 为补

/s 消除重复的字符

/d 删除找到的但没有替换的字符 ,任何再searchlist 中声明但再replacement没有给出替换的字符将被删除。

如果没有/d 修饰词,那么

1),replacement 比searchlist 短,则将复制replacement最后一个字符直到足够长

2),replacement 为空,则replacement = searchlist 可以用此用法统计次数和/s 压缩

$string =~ tr/a-zA-Z//s # bookkeeper -> bokeper

五.元字符

12个元字符/ | ( ) [ { ^ $ * + ?

^ : 在字符集中^ 表示补集[^1,2,3] 除了1,2,3

在一般的模式中表示 以什么开头

$ : 表示以什么结尾

六.量词 分为最大量词,最小量词(由?控制)

1.最大量词

* 匹配0 或更多次

+ 匹配1 或更多次

? 匹配1 或0 次

{count}匹配count次

{min,} 匹配至少min次

{min,max} 匹配至少min次,但不超过max次

2.最小量词

*? 匹配0次或更多次

+?匹配1次或更多次

??匹配0次或1次

{min,}? 匹配最多min次

{min,max}? 匹配至少min次,但不超过max次

七.常用的字母数字正则元符号

. 通配符匹配除了换行符外的任何单字符(如果加上修饰词/s 也可以匹配换行符)

/d 数字[0-9] /D 非数字

/s 空格

/S 非空格

/w 字[a-zA-Z0-9_]

/W 非字

/E 结束大小写或掩码

/l 把下一个字符变成小写/u 大写

/L 把/E以前的字母都变成小写 /U 大写 如:s/revision//u$&/g;

################################################## #######################

#

# 论坛实际问题及零散知识点

# ################################################## #########################

1.正则匹配的特殊变量

@- 最近一次正则表达式匹配的部分在目标字串中的起始偏移量

@+ 最近一次正则表达式匹配的部分在目标字串中的终止偏移量

$& 最近一次正则表达式匹配到的部分

$` 在目标字串中最近一次正则表达式匹配到的部分之前的内容

$' 在目标字串中最近一次正则表达式匹配到的部分之后的内容

篇2:Perl中的模式匹配学习笔记

这篇文章主要介绍了Perl中的模式匹配学习笔记,本文讲解了匹配操作符、模式中的特殊字符、模式匹配选项等内容,需要的朋友可以参考下

一、简介

模式指在字符串中寻找的特定序列的字符,由反斜线包含:/def/即模式def,其用法如结合函数split将字符串用某模式分成多个单词:@array = split(/ /, $line);

二、匹配操作符 =~、!~

=~检验匹配是否成功:$result = $var =~ /abc/;若在该字符串中找到了该模式,则返回非零值,即true,不匹配则返回0,即false。!~则相反。这两个操作符适于条件控制中,如:

代码如下:

if ($question =~ /please/) {

print (“Thank you for being polite!n”);

}

else {

print (“That was not very polite!n”);

}

三、模式中的特殊字符

PERL在模式中支持一些特殊字符,可以起到一些特殊的作用。

1、字符 +

+意味着一个或多个相同的字符,如:/de+f/指def、deef、deeeeef等。它尽量匹配尽可能多的相同字符,如/ab+/在字符串abbc中匹配的将是abb,而不是ab。当一行中各单词间的空格多于一个时,可以如下分割:@array = split (/ +/, $line);

注:split函数每次遇到分割模式,总是开始一个新单词,因此若$line以空格打头,则@array的第一个元素即为空元素。但其可以区分是否真有单词,如若$line中只有空格,则@array则为空数组。且上例中TAB字符被当作一个单词。注意修正。

2、字符 []和[^]

[]意味着匹配一组字符中的一个,如/a[0123456789]c/将匹配a加数字加c的字符串。与+联合使用例:/d[eE]+f/匹配def、 dEf、deef、dEef、dEEEeeeEef等。^表示除其之外的所有字符,如:/d[^deE]f/匹配d加非e字符加f的字符串。

3、字符 *和?

它们与+类似,区别在于*匹配0个、1个或多个相同字符,?匹配0个或1个该字符。如/de*f/匹配df、def、deeeef等;/de?f/匹配df或def。

4、转义字符

如果你想在模式中包含通常被看作特殊意义的字符,须在其前加斜线“”。如:/*+/中*即表示字符*,而不是上面提到的一个或多个字符的含义。斜线的表示为//。在PERL5中可用字符对Q和E来转义。

5、匹配任意字母或数字

上面提到模式/a[0123456789]c/匹配字母a加任意数字加c的字符串,另一种表示方法为:/a[0-9]c/,类似的,[a-z]表示任意小写字母,[A-Z]表示任意大写字母。任意大小写字母、数字的表示方法为:/[0-9a-zA-Z]/。

6、锚模式

锚 描述

^ 或 A 仅匹配串首

$ 或 Z 仅匹配串尾

b 匹配单词边界

B 单词内部匹配

例1:/^def/只匹配以def打头的字符串,/$def/只匹配以def结尾的字符串,结合起来的/^def$/只匹配字符串def(?)。A和Z在多行匹配时与^和$不同。

例2:检验变量名的类型:

代码如下:

if ($varname =~ /^$[A-Za-z][_0-9a-zA-Z]*$/) {

print (“$varname is a legal scalar variablen”);

} elsif ($varname =~ /^@[A-Za-z][_0-9a-zA-Z]*$/) {

print (“$varname is a legal array variablen”);

} elsif ($varname =~ /^[A-Za-z][_0-9a-zA-Z]*$/) {

print (“$varname is a legal file variablen”);

} else {

print (“I don‘t understand what $varname is.n”);

}

例3:b在单词边界匹配:/bdef/匹配def和defghi等以def打头的单词,但不匹配abcdef。/defb/匹配def和 abcdef等以def结尾的单词,但不匹配defghi,/bdefb/只匹配字符串def。注意:/bdef/可匹配$defghi,因为$并不被看作是单词的部分。

例4:B在单词内部匹配:/Bdef/匹配abcdef等,但不匹配def;/defB/匹配defghi等;/BdefB/匹配cdefg、abcdefghi等,但不匹配def,defghi,abcdef。

7、模式中的变量替换

将句子分成单词:

$pattern = “[t ]+”;

@words = split(/$pattern/, $line);

8、字符范围转义

转义字符 描述 范围

d 任意数字 [0-9]

D 除数字外的任意字符 [^0-9]

w 任意单词字符 [_0-9a-zA-Z]

W 任意非单词字符 [^_0-9a-zA-Z]

s 空白 [ rtnf]

S 非空白 [^ rtnf]

例:/[da-z]/匹配任意数字或小写字母。

9、匹配任意字符

字符“.”匹配除换行外的所有字符,通常与*合用。

10、匹配指定数目的字符

字符对{}指定所匹配字符的出现次数。如:/de{1,3}f/匹配def,deef和deeef;/de{3}f/匹配deeef;/de{3,}f/匹配不少于3个e在d和f之间;/de{0,3}f/匹配不多于3个e在d和f之间。

11、指定选项

字符“|”指定两个或多个选择来匹配模式。如:/def|ghi/匹配def或ghi。

例:检验数字表示合法性

if ($number =~ /^-?d+$|^-?0[xX][da-fa-F]+$/) {

print (“$number is a legal integer.n”);

} else {

print (“$number is not a legal integer.n”);

}

其中 ^-?d+$ 匹配十进制数字,^-?0[xX][da-fa-F]+$ 匹配十六进制数字。

12、模式的部分重用

当模式中匹配相同的部分出现多次时,可用括号括起来,用n来多次引用,以简化表达式:/d{2}([W])d{2}1d{2}/ 匹配:

12-05-92

26.11.87

07 04 92等

注意:/d{2}([W])d{2}1d{2}/ 不同于/(d{2})([W])121/ ,后者只匹配形如17-17-17的字符串,而不匹配17-05-91等。

13、转义和特定字符的执行次序

象操作符一样,转义和特定字符也有执行次序:

特殊字符 描述

模式内存

+ * ? {} 出现次数

^ $ b B 锚

| 选项

14、指定模式定界符

缺省的,模式定界符为反斜线/,但其可用字母m自行指定,如:

m!/u/jqpublic/perl/prog1! 等价于//u/jqpublic/perl/prog1/

注:当用字母‘作为定界符时,不做变量替换;当用特殊字符作为定界符时,其转义功能或特殊功能即不能使用。

15、模式次序变量

在模式匹配后调用重用部分的结果可用变量$n,全部的结果用变量$&。

代码如下:

$string = “This string contains the number 25.11.”;

$string =~ /-?(d+).?(d+)/; # 匹配结果为25.11

$integerpart = $1; # now $integerpart = 25

$decimalpart = $2; # now $decimalpart = 11

$totalpart = $&; # now totalpart = 25.11

四、模式匹配选项

选项 描述

g 匹配所有可能的模式

i 忽略大小写

m 将串视为多行

o 只赋值一次

s 将串视为单行

x 忽略模式中的空白

1、匹配所有可能的模式(g选项)

代码如下:

@matches = “balata” =~ /.a/g; # now @matches = (“ba”, “la”, “ta”)

匹配的循环:

while (“balata” =~ /.a/g) {

$match = $&;

print (“$matchn”);

}

结果为:

代码如下:

ba

la

ta

当使用了选项g时,可用函数pos来控制下次匹配的偏移:

代码如下:

$offset = pos($string);

pos($string) = $newoffset;

2、忽略大小写(i选项)例

/de/i 匹配de,dE,De和DE。

3、将字符串看作多行(m选项)

在此情况下,^符号匹配字符串的起始或新的一行的起始;$符号匹配任意行的末尾。

4、只执行一次变量替换例

代码如下:

$var = 1;

$line = ;

while ($var < 10) {

$result = $line =~ /$var/o;

$line = ;

$var++;

}

每次均匹配/1/。

5、将字符串看作单行例

/a.*bc/s匹配字符串axxxxx nxxxxbc,但/a.*bc/则不匹配该字符串。

6、在模式中忽略空格

/d{2} ([W]) d{2} 1 d{2}/x等价于/d{2}([W])d{2}1d{2}/。

五、替换操作符

语法为s/pattern/replacement/,其效果为将字符串中与pattern匹配的部分换成replacement。如:

代码如下:

$string = “abc123def”;

$string =~ s/123/456/; # now $string = “abc456def”;

在替换部分可使用模式次序变量$n,如s/(d+)/[$1]/,但在替换部分不支持模式的特殊字符,如{},*,+等,如s/abc/[def]/将把abc替换为[def],

替换操作符的选项如下表:

选项 描述

g 改变模式中的所有匹配

i 忽略模式中的大小写

e 替换字符串作为表达式

m 将待匹配串视为多行

o 仅赋值一次

s 将待匹配串视为单行

x 忽略模式中的空白

注:e选项把替换部分的字符串看作表达式,在替换之前先计算其值,如:

代码如下:

$string = “0abc1”;

$string =~ s/[a-zA-Z]+/$& x 2/e; # now $string = “0abcabc1”

六、翻译操作符

这是另一种替换方式,语法如:tr/string1/string2/。同样,string2为替换部分,但其效果是把string1中的第一个字符替换为string2中的第一个字符,把string1中的第二个字符替换为string2中的第二个字符,依此类推。如:

$string = “abcdefghicba”;

$string =~ tr/abc/def/; # now string = “defdefghifed”

当string1比string2长时,其多余字符替换为string2的最后一个字符;当string1中同一个字符出现多次时,将使用第一个替换字符。

翻译操作符的选项如下:

选项 描述

c 翻译所有未指定字符

d 删除所有指定字符

s 把多个相同的输出字符缩成一个

如$string =~ tr/d/ /c;把所有非数字字符替换为空格。$string =~ tr/t //d;删除tab和空格; $string =~ tr/0-9/ /cs;把数字间的其它字符替换为一个空格。

七、扩展模式匹配

PERL支持PERL4和标准UNIX模式匹配操作所没有的一些模式匹配能力。其语法为:(?pattern),其中c是一个字符,pattern是起作用的模式或子模式。

1、不存贮括号内的匹配内容

在PERL的模式中,括号内的子模式将存贮在内存中,此功能即取消存贮该括号内的匹配内容,如/(?:a|b|c)(d|e)f1/中的1表示已匹配的d或e,而不是a或b或c。

2、内嵌模式选项

通常模式选项置于其后,有四个选项:i、m、s、x可以内嵌使用,语法为:/(?option)pattern/,等价于/pattern/option。

3、肯定的和否定的预见匹配

肯定的预见匹配语法为/pattern(?=string)/,其意义为匹配后面为string的模式,相反的,(?!string)意义为匹配后面非string的模式,如:

代码如下:

$string = “25abc8”;

$string =~ /abc(?=[0-9])/;

$matched = $&; # $&为已匹配的模式,此处为abc,而不是abc8

4、模式注释

PERL5中可以在模式中用?#来加注释,如:

代码如下:

if ($string =~ /(?i)[a-z]{2,3}(?# match two or three alphabetic characters)/ {

...

}

现以简表总结如下:

一 文字处理模式中,/pattern/常用到的语法

/pattern/

结果

.

除了换行字符n外,找寻只有一个字符的字符串

x?

找寻0个或是1个x字符

x*

找寻0个或是0个以上的x字符

.*

找寻0个或是0个以上的任何字符

x+

找寻0个或是1个以上的x字符

.+

找寻1个或是1个以上的任何字符

{m}

找寻刚好是m个个数指定的字符

{m,n}

找寻在m个数个数以上,n个个数以下指定的字符

{m,}

找寻m个个数以上指定的字符

[]

找寻符合[]内的字符

[^]

找寻不符合[]内的字符

[0-9]

找寻符合0到9的任何一个字符

[a-z]

找寻符合a到z的任何一个字符

[^0-9]

找寻不符合0到9的任何一个字符

[^a-z]

找寻不符合a到z的任何一个字符

^

找寻字符开头的字符

$

找寻字符结尾的字符

d

找寻一个digit(数字)的字符,和[0-9]语法一样

d+

找寻一个digit(数字)以上的字符串,和[0-9]+语法一样

D

找寻一个non-digit(非数字)的字符,和[^0-9]语法一样

D+

找寻一个non-digit(非数字)以上的字符,和[^0-9]+语法一样

w

找寻一个英文字母或是数值的字符,和[a-zA-Z0-9]语法一样

w+

找寻一个以上英文字母或是数值的字符,和[a-zA-Z0-9]+语法一样

W

找寻一个非英文字母,数值的字符,和[^a-zA-Z0-9]语法一样

W+

找寻一个以上非英文字母,数值的字符,和[^a-zA-Z0-9]+语法一样

s

找寻一个空白的字符,和[ntrf]一样

s+

找寻一个以上空白的字符,和[ntrf]+一样

S

找寻一个非空白的字符,和[^ntrf]一样

S+

找寻一个以上非空白的字符,和[^ntrf]+一样

b

找寻一个不以英文字母,数值为边界的字符串

B

找寻一个以英文字母,数值为边界的字符串

a|b|c

找到符合a字符或是b字符或是c字符的字符串

abc

找到一个含有abc的字符串

(pattern)

()这个符号是会记忆所找寻到的字符,是一个很实用的语法

第一个()内所找到的字符串变成$1这个变量或是1变量

第二个()内所找到的字符串变成$2这个变量或是2变量

以此类推,笔者会在下一小节中详细介绍它的用法

/pattern/i

i这个参数是代表忽略英文大小写的意思,也就是在找寻字符 串的时候,不会去考虑英文的大小写

如果要在pattern模式中找寻一个有特殊的意义的字符,要在 这个字符前加上这个符号,这样才会让这个特殊字符失效

二 文字处理模式(Regular Expression)的简单范例

看了上一小节文字处理模(Regular Expression)之的,初学者对于这个语法的应用可能还不是很清楚,所以笔者会在这一小节中,举出一些在文字处理模式中常用的范例给大家看看:

范例

说明

/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,再跟着c的字符串,如同/cg{1,}i/

/cg?i/

找到c后面跟着0个或是一个g,再跟着c的字符串,如同/cg{0,1}i/

/c.i/

找到c后面跟着一个任意字符,再跟着i的字符串

/c..i/

找到c后面跟着二个任意字符,再跟着i的字符串

/[cgi]/

找到符合有这三个字符任意一个的字符串

/[^cgi]/

找到没有这三个字符中任意一个的字符串

/d/

找寻符合数值的字符串

可以使用/d+/来表示一个或是多个数值的字符串

/D/

找寻符合不是数值的字符串

可以使用/D+/来表示一个或是更多个非数值的字符串

/w/

找寻符合英文字母,数值的字符串

可以使用/w+/来表示一个或是更多个英文字母,数值的字符串

/W/

找寻符合非英文字母,数值字符的字符串

可以使用/W+/来表示一个或是更多个非英文字母,数值的字符串

/s/

找寻符合空白的字符串

可以使用/s+/来表示一个或是更多个空白字符的字符串

/S/

找寻符合不是空白的字符串

可以使用/S+/来表示一个或是更多不是空白的字符的字符串

/*/

找寻符合*这个符号的字符串,因为*在文字处理模式中有它的特殊意思,所以要在这个特殊符号前加上这个符号,这样才会让这个特殊字符失效

/abc/i

找寻符合abc的字符串而且不考虑这些符合字符串的大小写

三 文字处理模式(Regular Expresion)相关的运算符及函数

在perl程序写作中常会用到=~和!~这两个运算符及s和t这二个函数来和文字处理模式/pattern/搭配而成一个运算式,如果能够活用这些指令的 话,就可以很。轻易地来处理一些字符串,当然在CGI程序设计中了就更能得心应手了。现在就让作者来介绍这些运算符及函数的用法:

篇3:如何设置关键词匹配模式

1、广泛匹配:只要用户的搜索词中包含你的关键词(顺序不限,也可包含其他字词),您的广告就有可能展示。

例如,你投放的广泛匹配模式的篮球鞋这个词,那么用户搜索:篮球鞋、买篮球鞋、篮球运动鞋、篮球鞋带、跑鞋等关键词都有可能会触发你的广告进行展示!

2、词组匹配:有的搜索引擎竞价排名中又叫短语匹配,但本质意义是相同的。当用户搜索词与我们的投放词相同,或在投放词前/后包含其他字词时展示。

例如,你投放的词组匹配模式的篮球鞋,那么用户搜索:篮球鞋、买篮球鞋、最好的篮球鞋、篮球鞋专卖店等关键词时可能会触发你的广告进行展示;但“篮球运动鞋”不会触发你的广告。

3、完全匹配:又名精准匹配,精确匹配等叫法都是它。你的广告只有在用户搜索词与你的投放词完全相同时才会触发广告展示。

例如,你投放完全匹配模式的篮球鞋,那么只有用户搜索篮球鞋的时候,才会触发你的广告,别的任何关键词都不会,

注意,在英文adwords中,如果广告系列设置了单复数、紧密变体展示的话,那么哪怕是投放的完全匹配的basketball,那么无论搜索basketball还是basketballs都是会触发广告展示的。

4、否定匹配:我们可以使用否定匹配滤除不相关的搜索,进而防止产生不需要的点击。否定匹配模式可以运用于广告系列、广告组,GoogleAdWords中还可以设置共享库,直接运用于你想运用的任何广告系列。

例如,我们是卖玩具熊的,投放了“熊”这个关键词,那么我们需要添加否定匹配的”北极”,这样既保证了用户搜索玩具熊、泰迪熊等关键词时展示广告,又屏蔽了搜索北极熊的用户看到我们的广告!

那么,我们应该如何灵活地使用这4种关键词匹配模式呢?那主要是看你的广告目的是什么了,如果是为了获得更多的流量,那建议使用“广泛匹配+否定匹配”,或者“词组匹配+否定匹配”,如果是为了获得最精准的流量的话,可以使用完全匹配模式,但不建议这么做,这样做的话肯定会错过很多潜在客户的。

流量大小排序:广泛匹配>广泛匹配+否定匹配>词组匹配>词组匹配+否定匹配>完全匹配,流量精准度排序自然就是反过来的了!

篇4:模式串匹配KMP算法

前几天百度LBS部门实习二面,让写一个字符串匹配函数,当时忘记KMP怎么写了,就默默的写了一个暴力搜索,连尝试推导一下KMP都没有,结果自然是没有过,以后面试要多和面试官交流,就算忘记了,也要让他知道你试图推导,要不然他会觉得你可能都没有听过,

KMP是对前缀暴力搜索的改进,基于的想法其实是很朴素的。首先我们来看一下暴力搜索。

char* BF(char *src, char *pattern){

if(src == NULL || pattern == NULL) return NULL;

char *src_temp = src, *pattern_temp = pattern;

while(*src_temp != '' && *pattern_temp != ''){

if(*src_temp == *pattern_temp){

src_temp++; pattern_temp++;

}else{

src_temp = ++src;

pattern_temp = pattern;

}

}

if(*pattern_temp == '') return src;

else return NULL;

}

如果匹配失败,则将关键字向右滑动一个字符,从头开始匹配关键字,匹配成功则有src[i,i+1,......i+m] == p[0,1,......m]。BF的时间复杂度是O(m*n)。KMP改进的想法很朴素,能不能不是每次移动一个距离,每次多移动几个距离不就可以提高效率了么,但是每次多移动几个呢?KMP算法就是解决每次移动几个的问题。

假设暴力搜索时关键字在匹配到p[j]字符时失败了,即src[i,i+1,......,i+j-1] == p[0,1,......j-1](1), src[i+j] != p[j],则按照暴力搜索的方法将关键字向右滑动一个字符,即从src[i+1]开始从新匹配。

但是我们假设关键串有如下特征:

p[0,1.....j-2] != p[1,2,......j-1](2),则(1)可知p[0,1......j-2] != src[i+1,i+2,......,i+j-1],所以将关键串向右滑动一个字符从src[i+1]开始匹配肯定失败,所以在我们知道(2)式的情况下,就可以直接跳过向右滑动一个字符,那到底滑动几个字符呢?如果我们知道了子串p[0,1,......next(j-1)](next(j-1)又叫做j-1的失效函数),既是p[0,1,......j-1]的最长真前缀又是p[0,1,......j-1]最长后缀,那我们就可以将关键字向右滑动j-1-next(j-1)个字符,并且认为关键串的前next(j-1)个字符已经匹配成功,继续从src[j]开始匹配(这个思想同样应用于求next(j)的算法中,后面的代码中可以看到)。所以整个KMP算法的关键就是求得每一个next(j), j = 0......m,这样就可以知道在j+1匹配失败的时候,应该将关键字向右滑动几个字符位置。可以证明KMP算法的时间复杂度是O(m+n),

求next(j)的代码如下,相关解释会在注释中:

void next(char *pattern, int *next){ int t = -1; next[0] = -1; for(int s = 0; pattern[s+1] != ''; s++){ while(t > -1 && pattern[t+1] != pattern[s+1]) t = next[t];// t是最长真前缀的下标,s是字符串的下标,这其实就是一个真前缀和后缀的匹配过程,匹配失败则回溯真前缀的真前缀。这也就是KMP的核心思想。 if(pattern[s+1] == pattern[t+1]){t = t + 1;next[s+1] = t; }else next[s] = -1; }}

得到上面的next(j)后,就可以在O(n)的时间内扫描src字符串,以判断该关键串是否出现在其中。关键串沿着匹配字符串滑动,不断尝试将关键字的下一个字符与被匹配字符串的下一个字符匹配,逐步推进。如果在匹配了j个字符后无法匹配,那么将关键字向右滑动j-next(j)个位置,并且前next(j)个字符已经匹配成功,从src[j+1]继续匹配。

char* KMP(char *src, char *pattern){ if(src == NULL || pattern == NULL) return NULL; int pattern_size = 0; for(; pattern[pattern_size] != ''; pattern_size++) int* next = new int[pattern_size]; next(patter,next); int s = -1; for(int i = 0; src[i] != ''; i++){ while(s > -1 && src[i] != pattern[s+1]) s = next[s];//匹配失败,则将关键串向右滑动s - next[s]个字符,并且前next[s]个字符已经匹配成功,继续从src[i]开始匹配。 if(src[i] == pattern[s+1]){s++; } if(pattern[s+1] == '') return &src[i] - pattern_size +1; } return NULL;}

说到KMP就不得不说AC自动机,其实理解了KMP的思想,即找出子串p[0,1,......next(j-1)],既是p[0,1,......j-1]的最长真前缀又是p[0,1,......j-1]最长后缀,也就不难理解AC自动机。AC自动机又叫Aho-Corasick算法,是Aho和Croasick对KMP算法的推广,可以在一个文本串种识别一个关键字集合中的任何关键字。由于是关键字集合,所以采用了trie-tree来存储关键字,每个节点的失效函数稍微不同于KMP的失效函数,即状态next(j)对应于最长的、既是串pattern[0,1......,j]的后缀,又是某个关键字的前缀的字符串。对于AC自动机,你可以理解为是在求失效函数和匹配过程中考虑了关键字集合的KMP或者KMP是AC自动机的特例,但是核心思想就是子串p[0,1,......next(j-1)],既是p[0,1,......j-1]的最长真前缀又是p[0,1,......j-1]最长后缀,AC自动机只是描述关键字集合的一种方法。关于AC自动机,DSQiu的博客dsqiu.iteye.com/blog/1700312有一个比较好的实现,有兴趣可以看一下。

篇5:Lua字符串模式匹配函数小结

这篇文章主要介绍了Lua字符串模式匹配函数小结,本文涉及一些正则操作,需要的朋友可以参考下

模式匹配函数

在string库中功能最强大的函数是:

代码如下:

string.find(字符串查找)

string.gsub(全局字符串替换)

string.gfind(全局字符串查找)

string.gmatch(返回查找到字符串的迭代器)

这些函数都是基于模式匹配的,与其他脚本语言不同的是,Lua并不使用POSIX规范的正则表达式[4](也写作regexp)来进行模式匹配。主要的原因出于程序大小方面的考虑:实现一个典型的符合POSIX标准的regexp大概需要4000行代码,这比整个Lua标准库加在一起都大。权衡之下,Lua中的模式匹配的实现只用了500行代码,当然这意味着不可能实现POSIX所规范的所有更能。然而,Lua中的模式匹配功能是很强大的,并且包含了一些使用标准POSIX模式匹配不容易实现的功能。

string.gmatch(str, pattern)

这是一个返回迭代器的函数. 实际的用例如下:

代码如下:

s = “hello world from Lua”

for w in string.gmatch(s, “%a+”) do

print(w)

end

这里是一个捕获并将配对字符分别存到不同变量的例子:

代码如下:

t = {}

s = “from=world, to=Lua”

for k, v in string.gmatch(s, “(%w+)=(%w+)”) do

t[k]=v

end

for k, v in pairs(t) do

print(k, v)

end

string.gsub(str, pattern, repl, n)

string.gsub函数根据给定的配对表达式对源字符串str进行配对, 同时返回源字符串的一个副本, 该副本中成功配对的所有子字符串都将被替换. 函数还将返回成功配对的次数.实际的替换行为由repl参数的类型决定:

当repl为字符串时, 所有成功配对的子字符串均会被替换成指定的repl字串.

当repl为table时, 对每个成功配对的子字符串, 函数均会试图寻找以其为key值的table中的元素, 并返回该元素. 如果该配对包含任何捕获信息, 则以编号为1号的捕获作为key值进行查找.

当repl为函数时, 每个成功配对的子字符串均会作为参数被传入到该函数中去.

在repl是table或函数时, 如果该table或函数返回了字串或数字的值, 这个值依然会被用于替换副本字串中的配对子字串. 如果该table/函数返回的值为空, 将不发生替换.

n参数可选, 当它被指定时, string.gsub()函数只对源字符串中的前n个成功配对的成员进行操作.

以下是几个例子:

代码如下:

> print(string.gsub(“hello world”, “(%w+)”, “%1 %1”))

hello hello world world 2

> print(string.gsub(“hello Lua”, “(%w+)%s*(%w+)”, “%2 %1”))

Lua hello 1

> string.gsub(“hello world”, “%w+”, print)

hello world 2

> lookupTable = {[“hello”] = “hola”, [“world”] = “mundo”}

> print(string.gsub(“hello world”, “(%w+)”, lookupTable))

hola mundo 2

string.match(str, pattern, init)

string.match()只寻找源字串str中的第一个配对. 参数init可选, 指定搜寻过程的起点, 默认为1.

在成功配对时, 函数将返回配对表达式中的所有捕获结果; 如果没有设置捕获标记, 则返回整个配对字符串. 当没有成功的配对时, 返回nil.

代码如下:

string.match(“abcdaef”, “a”)

-> a

string.reverse(str)

返回一个字符串的倒序排列

代码如下:

string.reverse(“abcde”)

->edcba

string.dump(function)

返回指定函数的二进制代码(函数必须是一个Lua函数,并且没有上值)

string.find(str, pattern, init, plain)

string.find的基本应用就是用来在目标串(subject string)内搜索匹配指定的模式的串。函数如果找到匹配的串返回他的位置,否则返回nil.最简单的模式就是一个单词,仅仅匹配单词本身。比如,模式‘hello‘仅仅匹配目标串中的“hello”。当查找到模式的时候,函数返回两个值:匹配串开始索引和结束索引。

代码如下:

s = “hello world”

string.find(s, “hello”)   --> 1   5

string.find(s, “world”)   --> 7   11

string.find(s, “l”)       --> 3   3

string.find(s, “lll”)     --> nil

string.find函数第三个参数是可选的:标示目标串中搜索的起始位置。当我们想查找目标串中所有匹配的子串的时候,这个选项非常有用。我们可以不断的循环搜索,每一次从前一次匹配的结束位置开始。下面看一个例子,下面的代码用一个字符串中所有的新行构造一个表:

代码如下:

local t = {}     -- 存放回车符的位置

local i = 0

while true do

i = string.find(s, “n”, i+1) -- 查找下一行

if i == nil then break end

table.insert(t, i)

end

string.sub(str,sPos,ePos)

string.gsub的功能是截取字符串,他从指定起始位置截取一个字符串。string.sub可以利用string.find返回的值截取匹配的子串。

对简单模式而言,匹配的就是其本身

代码如下:

s = “hello world”

local i, j = string.find(s, “hello”)   --> 1   5

string.sub(s, i, j)       --> hello

string.gsub(str, sourcestr, desstr)

string.gsub的基本作用是用来查找匹配模式的串,并将使用替换串其替换掉:

string.gsub函数有三个参数:目标串,模式串,替换串。

代码如下:

s = string.gsub(“Lua is cute”, “cute”, “great”)

print(s)     --> Lua is great

s = string.gsub(“all lii”, “l”, “x”)

print(s)     --> axx xii

s = string.gsub(“Lua is great”, “perl”, “tcl”)

print(s)     --> Lua is great

第四个参数是可选的,用来限制替换的范围:

代码如下:

s = string.gsub(“all lii”, “l”, “x”, 1)

print(s)         --> axl lii

s = string.gsub(“all lii”, “l”, “x”, 2)

print(s)         --> axx lii

string.gsub的第二个返回值表示他进行替换操作的次数,

例如,下面代码涌来计算一个字符串中空格出现的次数:

代码如下:

_, count = string.gsub(str, “ ”, “ ”)

(注意,_ 只是一个哑元变量)

模式

你还可以在模式串中使用字符类。字符类指可以匹配一个特定字符集合内任何字符的模式项。比如,字符类%d匹配任意数字。所以你可以使用模式串‘%d%d/%d%d/%d%d%d%d‘搜索dd/mm/yyyy格式的日期:

代码如下:

s = “Deadline is 30/05/, firm”

date = “%d%d/%d%d/%d%d%d%d”

print(string.sub(s, string.find(s, date)))   --> 30/05/1999

下面的表列出了Lua支持的所有字符类:

单个字符(除^$()%.[]*+-?外): 与该字符自身配对

.(点): 与任何字符配对

%a: 与任何字母配对

%c: 与任何控制符配对(例如n)

%d: 与任何数字配对

%l: 与任何小写字母配对

%p: 与任何标点(punctuation)配对

%s: 与空白字符配对

%u: 与任何大写字母配对

%w: 与任何字母/数字配对

%x: 与任何十六进制数配对

%z: 与任何代表0的字符配对

%x(此处x是非字母非数字字符): 与字符x配对. 主要用来处理表达式中有功能的字符(^$()%.[]*+-?)的配对问题, 例如%%与%配对

[数个字符类]: 与任何[]中包含的字符类配对. 例如[%w_]与任何字母/数字, 或下划线符号(_)配对

[^数个字符类]: 与任何不包含在[]中的字符类配对. 例如[^%s]与任何非空白字符配对

当上述的字符类用大写书写时, 表示与非此字符类的任何字符配对. 例如, %S表示与任何非空白字符配对.例如,‘%A‘非字母的字符

代码如下:

print(string.gsub(“hello, up-down!”, “%A”, “.”))

--> hello..up.down. 4

(数字4不是字符串结果的一部分,他是gsub返回的第二个结果,代表发生替换的次数。下面其他的关于打印gsub结果的例子中将会忽略这个数值。)在模式匹配中有一些特殊字符,他们有特殊的意义,Lua中的特殊字符如下:

代码如下:

( ) . % + - * ? [ ^ $

‘%‘ 用作特殊字符的转义字符,因此 ‘%.‘ 匹配点;‘%%‘ 匹配字符 ‘%‘。转义字符 ‘%‘不仅可以用来转义特殊字符,还可以用于所有的非字母的字符。当对一个字符有疑问的时候,为安全起见请使用转义字符转义他。

对Lua而言,模式串就是普通的字符串。他们和其他的字符串没有区别,也不会受到特殊对待。只有他们被用作模式串用于函数的时候,‘%‘ 才作为转义字符。所以,如果你需要在一个模式串内放置引号的话,你必须使用在其他的字符串中放置引号的方法来处理,使用 ‘‘ 转义引号,‘‘ 是Lua的转义符。你可以使用方括号将字符类或者字符括起来创建自己的字符类(译者:Lua称之为char-set,就是指传统正则表达式概念中的括号表达式)。比如,‘[%w_]‘ 将匹配字母数字和下划线,‘[01]‘ 匹配二进制数字,‘[%[%]]‘ 匹配一对方括号。下面的例子统计文本中元音字母出现的次数:

代码如下:

_, nvow = string.gsub(text, “[AEIOUaeiou]”, “”)

在char-set中可以使用范围表示字符的集合,第一个字符和最后一个字符之间用连字符连接表示这两个字符之间范围内的字符集合。大部分的常用字符范围都已经预定义好了,所以一般你不需要自己定义字符的集合。比如,‘%d‘ 表示 ‘[0-9]‘;‘%x‘ 表示 ‘[0-9a-fA-F]‘。然而,如果你想查找八进制数,你可能更喜欢使用 ‘[0-7]‘ 而不是 ‘[01234567]‘。你可以在字符集(char-set)的开始处使用 ‘^‘ 表示其补集:‘[^0-7]‘ 匹配任何不是八进制数字的字符;‘[^n]‘ 匹配任何非换行符户的字符。记住,可以使用大写的字符类表示其补集:‘%S‘ 比 ‘[^%s]‘ 要简短些。

Lua的字符类依赖于本地环境,所以 ‘[a-z]‘ 可能与 ‘%l‘ 表示的字符集不同。在一般情况下,后者包括 ‘ç‘ 和 ‘ã‘,而前者没有。应该尽可能的使用后者来表示字母,除非出于某些特殊考虑,因为后者更简单、方便、更高效。

可以使用修饰符来修饰模式增强模式的表达能力,Lua中的模式修饰符有四个:

代码如下:

+     匹配前一字符1次或多次

*     匹配前一字符0次或多次

-     匹配前一字符0次或多次

?     匹配前一字符0次或1次

‘+‘,匹配一个或多个字符,总是进行最长的匹配。比如,模式串 ‘%a+‘ 匹配一个或多个字母或者一个单词:

代码如下:

print(string.gsub(“one, and two; and three”, “%a+”, “word”))

--> word, word word; word word

‘%d+‘ 匹配一个或多个数字(整数):

代码如下:

i, j = string.find(“the number 1298 is even”, “%d+”)

print(i,j)   --> 12 15

‘*‘ 与 ‘+‘ 类似,但是他匹配一个字符0次或多次出现.一个典型的应用是匹配空白。比如,为了匹配一对圆括号()或者括号之间的空白,可以使用 ‘%(%s*%)‘。( ‘%s*‘ 用来匹配0个或多个空白。由于圆括号在模式中有特殊的含义,所以我们必须使用 ‘%‘ 转义他。)再看一个例子,‘[_%a][_%w]*‘ 匹配Lua程序中的标示符:字母或者下划线开头的字母下划线数字序列。

‘-‘ 与 ‘*‘ 一样,都匹配一个字符的0次或多次出现,但是他进行的是最短匹配。某些时候这两个用起来没有区别,但有些时候结果将截然不同。比如,如果你使用模式 ‘[_%a][_%w]-‘ 来查找标示符,你将只能找到第一个字母,因为 ‘[_%w]-‘ 永远匹配空。另一方面,假定你想查找C程序中的注释,很多人可能使用 ‘/%*.*%*/‘(也就是说 “/*” 后面跟着任意多个字符,然后跟着 “*/” )。然而,由于 ‘.*‘ 进行的是最长匹配,这个模式将匹配程序中第一个 “/*” 和最后一个 “*/” 之间所有部分:

代码如下:

test = “int x; /* x */ int y; /* y */”

print(string.gsub(test, “/%*.*%*/”, “”))

--> int x;

然而模式 ‘.-‘ 进行的是最短匹配,她会匹配 “/*” 开始到第一个 “*/” 之前的部分:

代码如下:

test = “int x; /* x */ int y; /* y */”

print(string.gsub(test, “/%*.-%*/”, “”))

--> int x; int y;

‘?‘ 匹配一个字符0次或1次。举个例子,假定我们想在一段文本内查找一个整数,整数可能带有正负号。模式 ‘[+-]?%d+‘ 符合我们的要求,它可以匹配像 “-12”、“23” 和 “+1009” 等数字。‘[+-]‘ 是一个匹配 ‘+‘ 或者 ‘-‘ 的字符类;接下来的 ‘?‘ 意思是匹配前面的字符类0次或者1次。

与其他系统的模式不同的是,Lua中的修饰符不能用字符类;不能将模式分组然后使用修饰符作用这个分组。比如,没有一个模式可以匹配一个可选的单词(除非这个单词只有一个字母)。下面我将看到,通常你可以使用一些高级技术绕开这个限制。

以 ‘^‘ 开头的模式只匹配目标串的开始部分,相似的,以 ‘$‘ 结尾的模式只匹配目标串的结尾部分。这不仅可以用来限制你要查找的模式,还可以定位(anchor)模式。比如:

代码如下:

if string.find(s, “^%d”) then ...

检查字符串s是否以数字开头,而

代码如下:

if string.find(s, “^[+-]?%d+$”) then ...

检查字符串s是否是一个整数。

‘%b‘ 用来匹配对称的字符。常写为 ‘%bxy‘ ,x和y是任意两个不同的字符;x作为匹配的开始,y作为匹配的结束。比如,‘%b()‘ 匹配以 ‘(‘ 开始,以 ‘)‘ 结束的字符串:

代码如下:

print(string.gsub(“a (enclosed (in) parentheses) line”, “%b()”, “”))

--> a line

常用的这种模式有:‘%b()‘ ,‘%b[]‘,‘%b%{%}‘ 和 ‘%b‘。你也可以使用任何字符作为分隔符。

篇6:拓展精准流量 如何设置关键词匹配模式

关键词匹配模式设置好了可以提升推广效果,设置不好则会造成大量广告成本的浪费,为什么这么说呢?多年的竞价经验发现,除了“精确”这种匹配模式之外,其他的关键词匹配模式都会匹配出大量的无效关键词,如:精确包含、同义包含、核心包含、广泛,这样的结果就会浪费很多广告费,

关键词匹配模式

我们来看5种关键词匹配模式的解释:

精确匹配:仅当网民的搜索词与您提交的关键词完全一致时,您的推广结果才有展现机会。

短语-精确包含:当网民的搜索词完全包含您的关键词时,系统才有可能会自动展现您的推广结果。

短语-同义包含:当网民搜索词完全包含您的关键词及您关键词的插入、颠倒和同义形态时,系统才有可能会自动展现您的推广结果。

短语-核心包含:当网民搜索词包含您关键词或您关键词的核心部分,或者包含您关键词或您关键词核心部分的插入、颠倒和同义形态时,系统才有可能会自动展现您的推广结果。

广泛匹配:当网民搜索词与您的关键词高度相关时,即使您并未提交这些词,您的推广结果也可能获得展现机会。

对于没有做过竞价的朋友来说,看过以上百度官方的解释之后,第一感觉应该会选择广泛,百度官方强调“高度相关、获得更多展现机会”,现实情况也确实是很多中小企业竞价账户的关键词匹配模式为广泛,但是实际情况是,如果你设置关键词匹配模式为广泛的话,您的广告费中的至少百分之50以上是被浪费掉了,比如XX科技一个客户是做成人英语培训的,如果设置关键词“成人英语培训”匹配模式为广泛的话,那么则会匹配出“小学英语培训”、“小学英语培训班”、“初中英语培训”、“三年级英语学习班”等等大量关键词,而这些关键词显然与我们的服务内容没有关系。

那么设置短语-核心包含呢?同样会匹配出很多无效关键词,比如“在线成人英语视频教程”、“成人英语学习方法”、“成人英语等级考试”、“成人英语自学网”等,这也就是为什么您会感叹,每天来100多ip,关键词设置为“短语-核心包含”,居然连个咨询的都没有,真邪门,

那是不是我们设置为短语-精确包含和短语-同义包含就不会匹配出无效关键词了,同样不是的,如果你每天看你的竞价统计搜索词报告的话,您会发现关键词即使设置为这2种匹配模式,仍然会匹配出很多无效关键词,比如:“英语培训班”,则会匹配出“英语培训班宣传单”、“英语培训班招生简章”、“英语培训班招生广告”等,显然这些词依然为无效关键词,这些关键词带来的流量同样为垃圾流量,对于我们业务的提升是没有任何帮助的。

那是不是所有关键词都应该设置为精确匹配呢?如果全部关键词都设置为精确匹配模式的话,则会出现另外一个问题,会错过一些转化率极高的关键词,用户的搜索习惯是千变万化的,有些用户喜欢搜索很长的词,比如“郑州的短期英文培训”、“郑州成人学英语口语哪里好啊”、“成人到哪儿能学到系统的英语”,而另外一些用户则喜欢搜索“英语学习班”、“郑州成人英语”,这些关键词的转化率都是比较高的,我们在添加关键词的时候使用关键词工具会尽可能多的添加精准关键词,但是我们能做的也只是近可能的添加更多,永远不可能达到所有,记住,用户会使用各种各样的关键词搜索他们想要的信息,而其中的一部分搜索关键词,我们是很难挖掘到的,如果我们将关键词全部设置为“精确匹配”的话,那必然会损失掉一些高质量的客户,而设置为“短语-精确包含”和“短语-同义包含”的话就又会匹配出无效关键词,那么我们到底设置为哪种匹配模式比较好呢?

根据我们竞价团队多年的经验总结,一个竞价账户里的关键词匹配模式同时存在“精确匹配”、“短语-精确包含”和“短语-同义包含”,根据关键词的不同特点对应不同的匹配模式,这是一种比较完美的设置方法,结合“否定关键词”工具,保证所有关键词带来的流量为精准流量。

英雄联盟视频www.aliqon.cn/ (转载请注明)

篇7:Erlang中的模块与模式匹配介绍

这篇文章主要介绍了Erlang中的模块与模式匹配介绍,本文分别对模块与模式匹配做了讲解,需要的朋友可以参考下

模块是Erlang的基本代码单元,erl文件编译后以.beam作为扩展名,采用UTF8字符集,.erl文件示意如下:

-module(模块名,与存放模块的文件名相同)

-export([方法名/输入参数的个数])

代码如下:

Method1( {a,b,c})->a*b*c;

Mehtod2({d,e})->d-e.

模块属性有两种类型:预定义型和用户定义型,

Erlang中用于代表函数的数据类型被称为fun,相当于python中的lambda,一般用于

1)     对列表里的每个元素执行相同的操作

2)     创建自己的控制

3)     实现可重入解析代码,解析组合器或者lazy evaluator

模式匹配是Erlang的根基,case和if表达式使Erlang小而一致。

代码如下:

case Expression of

Pattern1[ when Guard1] -> Expr-seq1;

Pattern2[when Guard2]-> Expr-seq2;

end

if

Guard1-> Expr_seq1;

Guard2-> Expr_seq2;

end

Erlang有两种方法来捕捉异常错误,一种是把抛出异常的调用函数封装在一个try_catch 表达式里,提供了概括信息,另一种是把调用封装在一个catch表达式里,提供了详细的栈跟踪信息,

在捕捉到一个异常后,可以调erlang:get_stacktrace来找到最近的栈信息。

把二进制型,位串,和位级模式匹配引入Erlang是为了简化网络编程。二进制型是置于双小于号和双大于号之间的一列整数或字符串。

例如: 1> Mybin1 = << “ILOVE YOU”>>

代码如下:

Term_to_bingary(Term) ->Bin 转换为二进制型

Binary_to_Term(Bin) ->Term 二进制型转换为Erlang的数据类型

精心选择宏的名称和Erlang代码布局,能最大限度地缩小C和Erlang的语义鸿沟。在Erlang里,最小的寻址单元是1位,位串里的位序列可直接访问。

篇8:模式识别中不同记忆编码的模式和的匹配

模式识别中不同记忆编码的模式和模板的匹配

通过一项全部报告实验和两项抽样汉字识别实验,探讨了模式识别中不同记忆编码的模式和模板如何匹配的问题.实验结果显示:全部报告实验中,待识别汉字模式平均转换到短时记忆的量为3.64个,比进入到感觉记忆中的信息量(8个)少得多,这表明感觉记忆信息向短时记忆的转换受到了约束;抽样汉字识别实验1中,匹配汉字模式识别量与其转换量之间无显著差异(p>0.5),说明转换到短时记忆的信息被等消耗识别;抽样汉字识别实验2中,匹配汉字模式识别量约为其转换量的'2倍,差异显著(p<0.001),基于受约束转换和等消耗识别现象,由模式识别信息来源的判据的判据可知,模式识别直接利用了感觉记忆编码的模式信息.抽样汉字识别实验2中,与模式进行匹配的模板只具有短时记忆编码,因此,有理由认为:模式和模板能以不同的记忆编码直接匹配.

作 者:张航 何姣 杨仲乐  作者单位:中南民族大学认知科学实验室,武汉,430074 刊 名:中南民族大学学报(自然科学版) 英文刊名:JOURNAL OF SOUTH-CENTRAL UNIVERSITY FOR NATIONALITIES(NATURAL SCIENCE EDITION) 年,卷(期): 23(4) 分类号:B842.3 关键词:模式识别   记忆编码   模式   模板  

篇9:基于点模式的快速指纹匹配算法研究

基于点模式的快速指纹匹配算法研究

该文在基于点模式的指纹匹配算法基础上将指纹匹配分成粗细两个等级依次进行.在第一级匹配中,通过统计ROI(RegionofInterest)中端点和分叉点的'个数对指纹进行粗匹配,大大节省了匹配算法的运算时间.在第二级匹配中,利用基于可变限界盒的指纹匹配方法,在一定程度上解决了指纹非线性形变的问题.

作 者:张莹 许国 刘玉良 张勇 ZHANG Ying XU Guo LIU Yu-liang ZHANG Yong  作者单位:天津科技大学电子信息与自动化学院,天津,300222 刊 名:电脑知识与技术 英文刊名:COMPUTER KNOWLEDGE AND TECHNOLOGY 年,卷(期): 5(20) 分类号:P391.41 关键词:指纹匹配   点模式   两级匹配   可变限界盒   fingerprint matching   minutiae,two―step matching,Variable Bounding Box  

篇10:史永翔:找到匹配的赢利模式

商业成本愈来愈高,商业类企业承担的固定成本也就愈高,自然造成了企业安全度的下降、经营风险的增大,

企业经营的目的是实现持续的赢利,而实现持续赢利的关键是内部能力与外部需求的结合,这个结合做得越正确企业的投入产出比越大;结合的越紧密企业管理效率越高;结合的越持久,企业的竞争力就越能打造成功。

而这个结合点的分析与设计就是企业的赢利模式。赢利模式分为内外两个部分:外部我们称之为机会、市场、趋势、消费者的变化;内部我们称之为能力,是企业固有属性、资产、软实力、经验等等。

找到企业匹配的赢利模式设计和管理,就要从三方面思考并执行。

第一、行业属性。

进行企业赢利模式设计,就要分析企业产品的赢利空间、成本结构,更直接的理解就是要分析企业的资产结构,弄清资产结构决定企业赢利能力的途径,找到企业赢利管理的出发点与核心点。而行业属性的不同,投资结构就会不同,这就会带来成本结构的不同,这些决定了需要消化的直接成本和固定成本。在这里你需要很好的测算你的成本动态。这里的固定成本,不仅包括固定资产投资也包括相对固定的费用支出(如:房租、管理人员等),

因此,你站在什么起始点上很重要!这就是赢利核心点,就是你所发现的正确道路。

第二、就是围绕赢利点设计赢利模式。

我们要强化围绕赢利点来设计战略步骤、营销方式和管理关注点,有机地将行业属性与企业战略、财务、营销相结合;并围绕此核心点展开,不要使方法之间产生对冲,保证在正确的道路上摆动。这样才能有效地将企业优势彻底发挥出来,从而避开高风险的打击。

第三、要设计运营步骤,并保证做到。

我们经常在企业管理中发现,很多方案、计划都没能做到;大部分都是因为我们忽视了设计行动步骤的重要性。而且,因为方案没能做到,我们就会怀疑做错了,设计错了!这就带来了更大的迷茫,脱离了正确的方向。所以,好的设计方案很重要,而坚决地执行力才是方案成功的保障!执行就要坚决!怕麻烦做事,想抄近路,只能导致失败。而坚决地执行力是要有清晰准确的行动步骤,并不断检查是否做到。从而保证在正确道路上持续努力。

下面我们用零售企业的案例来探讨一下如何一步步设计企业赢利模式,我们先从这个行业的属性出发,可以看出这个行业的企业成本负担中,直接成本与固定成本都占有相当的位置;同时又受制于行业特点,不能大量无限销售。

篇11:基于相似匹配的液体火箭发动机故障模式挖掘

基于相似匹配的液体火箭发动机故障模式挖掘

将时间序列相似性匹配方法引入到液体火箭发动机故障模式挖掘中.针对发动机试车数据的特点,提出了一种基于序变换的时间序列相似匹配算法.该算法具有对时间序列幅值和持续时间不敏感、抗噪声能力强等优点.对某型液体火箭发动机故障数据的'相似匹配实验表明:该算法能够为液体火箭发动机的故障检测和诊断提供较好的技术支持.

作 者:袁晓峰 许化龙 陈淑红 杨卫军 Yuan Xiaofeng Xu Hualong Chen Shuhong Yang WeiJun  作者单位:袁晓峰,许化龙,杨卫军,Yuan Xiaofeng,Xu Hualong,Yang WeiJun(第二炮兵工程学院西安710025)

陈淑红,Chen Shuhong(第二炮兵装备研究院第三研究所北京100085)

刊 名:火箭推进 英文刊名:JOURNAL OF ROCKET PROPULSION 年,卷(期): 34(4) 分类号:V434 关键词:时间序列   序模式   相似性搜索   发动机  

篇12:Perl一句话命令行编程中常用参数总结

作者:乡村运维 字体:[增加 减小] 类型:

这篇文章主要介绍了Perl一句话命令行编程中常用参数总结,本文总结了如-e、-E、-M、-m等参数,并讲解了它们的作用及用法,需要的朋友可以参考下

工作中的线上环境有很多的perl命令行的类似一句话的命令,今天总结下perl的命令行编程的一些东西,

-e后面紧跟着引号里面的字符串是要执行的命令:

代码如下:

king@king:~$ perl -e ‘print “hello world n”‘

hello world

如果是多个命令就可以使用多个-e,这里是不是想到了sed呢?但是要注意的是中间的哪个“;”.

代码如下:

king@king:~$ perl -e ‘print “hello world n” ;‘ -e ‘print “my first perl command line script. n”‘

hello world

my first perl command line script

-M导入要使用的模块:

代码如下:

king@king:~$ perl -MLWP::Simple -e‘print head “www.chinacache.com”,”n”‘

text/html; charset=utf-81337525116978307200Apache/2.2.3 (CentOS)

另外-M可以判断某个模块是不是已经安装了

-m的功能和-M类似,区别在于-M 模块名等同于use 模块名,这样会把一些默认的函数或者其它东西引进过来,-m 模块名 则会关闭这些默认值,这样可以引入一些你只使用的函数;例如上面的例子:

换成-m的话就不会有任何输出;-m 和 -M 通过 = 来引入某个模块的特别函数.

代码如下:

perl -MCGI=‘header,start_html‘ -e ‘print header, start_html‘

-w等同于use warnings

-n -p都会使用 将所有 @ARGV 参数当作文件来逐行运行(有循环的意思哦,经常和其它参数一起处理文件),会将读入的内容隐式的逐一按行来遍历文件.每一行将缺省保存在 $_;但-p 会将内容“重复”打印出来,而-n更倾向与打印满足某种条件的行(这这里还有一些有用的变量比如$. 表示当前行的行数):

代码如下:

king@king:~$ cat file.txt

A 1

B 2

C 3

king@king:~$ perl -p -e ‘print ‘ file.txt

A 1

A 1

B 2

B 2

C 3

C 3

king@king:~$ perl -n -e ‘print ‘ file.txt

A 1

B 2

C 3

看到这里是不是想到了sed的-n 的特性:

代码如下:

king@king:~$ sed -ne ‘p‘ file.txt

A 1

B 2

C 3

king@king:~$ sed -e ‘p‘ file.txt

A 1

A 1

B 2

B 2

C 3

C 3

-i将修改直接的写入文件,这个和sed也是一样的哦;

代码如下:

king@king:~$ cat file.txt

A 1

B 2

C 3

king@king:~$ perl -pi -e ‘s/A/a/‘ file.txt

king@king:~$ cat file.txt

a 1

B 2

C 3

-a打开自动分离 (split) 模式. 空格是缺省的分离号. 输入根据分离号被分离然后放入缺省数组 @F.

代码如下:

king@king:~$ perl -na -e ‘print $F[1],”n”‘ file.txt

1

2

3

和awk是不是很像?还有更像的,那就是-F,和awk一样更改字段之间的分割符,默认是空格和tab;

代码如下:

king@king:~$ perl -F‘:‘ -alne ‘print $F[0],” “,$F[-1] if /bash$/‘ /etc/passwd

root /bin/bash

king /bin/bash

guest-b0SIey /bin/bash

看到上面的那个-l的参数没?它的最主要的作用就是chomp字段和在每个输出的后面加上“n”,让输出换行;是不是挺有用的呢?

有没有其它和awk有类似的地方呢?答案是肯定的,

BEGIN{},END{}是不是也很熟悉呢?

以下是一些常用的简单实例

#perl -pi -e‘s/aaa/bbb/‘ filename 修改当前file文件中的文件,不生成中间文件,速度很快.记住 -i 开关,因为它让你原地编辑文件.

#perl -ne ‘print if /^aaaaa/‘ filename 象grep一样过滤文件中需要的内容.这个地方,使用了-n,所以一次是做一行的操作,直到整个文件读完.另外,在管道时,-n也会一样,来遍历管道送过来的内容.

#perl -n -e ‘print “$. C $_”‘ filename 这个例子中的,没用-ne,只是命令写成了-n -e,其实一样,这个例子中,是给当前文件中的内容都加一个行号打印出来.注:$.表示当前行号

#perl -pe ‘$_ = “$. $_”‘ filename 这个其实和上面一样,分别只是使用了-p替换了-n,这个有个什么好处啦,别的地方都一样,但-p按行来遍历完文件后,会给$_打印出来.

大家还记得awk分割域(awk ‘{i = NF C 1; print $1 + $i}‘)啊,是不是很方便,下面我们来看看perl

代码如下:

#perl -lane ‘print $F[0] + $F[-2]‘ 这个神奇的地方在于-a,使用-a后.因为-n分行读进来,然后-a给数据分割成@F的数组.

#perl -ne ‘print if /^START$/ .. /^END$/‘ 打印正则中从$start到$end的地方

#perl -ne ‘print if $. >= 15; exit if $. >= 17;‘ 有效地打印数字范围中的行

#perl -p -i.bak -e ‘s/bfoob/bar/g‘ *.c 原地修改 -i 开关的神奇之处在于它对 @ARGV 中的每个文件都用该脚本对该文件输出所产生的文件版本进行替代

#perl -ne ‘print scalar reverse $_‘ test 给文件中的内容反向排序,比如文件中有abc,就会变成cba

篇13:关于课堂教学模式学习心得总结

数学新课标要求数学教学要促进学生的知识技能、积极思考、解决问题的能力全方位的发展。我在数学课堂教学中,学生的知识取得与搜集,数学知识的巩固与提高,数学解题技能的形成及掌握,还有学生解决数学问题的方法、策略以及在这一过程中的体验,等等,都必须在创设问题情境中完成。丰富教学方式,激起学生学习数学的热情,使他们有极大的兴趣参与到课堂中,提高他们学习数学的能力,也体会到无比的快乐。我从事多年的小学低年级数学教学,对他们学习的规律有一定的掌握,结合教学实践,谈谈我的点滴体会:

1 创设生活化的情境

新课程理念要求低年级课堂教学中,根据学生的年龄特点和生活经验,设计生动有趣、直观形象的数学教学活动,如讲故事、做游戏、模拟表演等,激发学生的学习兴趣,让学生在生动具体的情境中理解和认识数学知识。教学中通过情景的创设,架起数学与生活桥梁,让学生往返于数学与生活之间,在“实际生活”或“模拟生活”中自然地学习“现实的数学”,体会数学来于生活、服务于生活,并让学生感受到所面临的问题是熟悉的、常见的,又感到是新奇的、富有挑战性的。一方面使学生产生动机去积极的探索和思考问题,而另一方面使学生意识到自己的不足和局限性,使他们产生强烈的求知欲望,激励自己不探索出结果不罢休的思想 。如:教学《角的初步认识》时,我首先出示熟悉的五角星,让他们找出它的角,初步感知角,接着问:“生活中哪些地方有角?比一比,看谁找到的角最多”,以此激发他们的学习兴趣,使他们充分认识到生活中处处有角,从而体会数学与日常生活的密切联系。

2 引导学生求异创新

有效的课堂教学,是学生动手实践与操作,不是学生单纯地依赖模仿与记忆。要培养学生的创新意识,就要打破常规教学模式,鼓励学生多发言,允许学生“插嘴”。常说:“提出一个问题,往往比解决一个问题更重要”。因此,鼓励学生多提问,发表独特见解,是培养创新意识的重要途径。一旦学生提问,起初无论质量如何,正确与否,哪怕某些发问是可笑的、甚至错误的,教师也要从积极方面加以引导、鼓励,并帮助学生分析错误的原因。如,在学习了“乘法的初步认识”后,我出示了下面一组练习,把下列加法算式改写成乘法算式:(1)4+4+4+4 (2)5+5+5+4 (3)1+1+1 (4)3+3+3+4。(1)、(3)学生很顺利地改写了,对(2)、(4)则表示否定。但通过仔细观察,有学生说(2)还可以改写成5×3+4、5×4-1,(4)还可以写成3×3+4、4×4﹣3,虽然改写的是乘加、乘减算式,但却说明学生善于联系,体现了创新意识,我给予了鼓励“你是好样的!”、“你能用多种方法解题,真棒!”,有效的评价了学生创新的积极性。

3 要关注合作学习的教学形式

在小学低年级数学教学中,各小组的合作学习的教学形式是常采用的。教师是这种合作学习的设计者,在备课时教师要深入研究教材,备学生、备教材,理解教学目标,认识教学对象,确定需要合作学习的内容,为合作学习提供可研究的问题。如在教学《分类》一课时,小组合作,利用提供的商品布置“小商店”;在教学《立体图形的认识》一课时,学生组内合作,利用长方体、正方体、圆柱体、球体拼出你喜欢的东西。通过这样的合作学习,学生能与其他同学相互交流,大家的智慧在一起碰撞出火花,体验到学习的快乐,培养了主动参与的意识。

4 运用激励性的评价

这种激励性评价实际就是对学生在学习中,所表现出来的优点及时进行表扬和鼓励,虽然学生有时回答错误,但教师也不要批评,而要提示用简单的方法回答出正确的问题,这样学生学到的知识才能更有印象。尤其是低年级学生,教师的一次不经意的表扬可能会影响他的一生。这种评价不仅仅是为了检查学生的表现,更在于提高学习的效率,促进学生的发展,让学生在评价过程中增强信心、体验学习成功的喜悦,获得感受。

课堂上,教师面对的是一个个活生生的小孩子,他们文化环境、家庭背景和自身的思维方式不同,基础、性格、智力等都存在着差异,如果用同一标准去衡量那是不合适的。对不同层次的,评价标准应不同。同一问题对不同类别的学生的不同回答,也应作出不同的评价。对学困生哪怕是微小的进步,也要给予肯定和鼓励,要使他们真正感受到老师在关心他们,帮助他们。而对优等生的正确回答,除了要给予充分肯定外,还要对他们提出期待和希望,让他们更加努力,去争取更大的成功。

总之,知识来源于实践与创新中,把现实生活与学生的学习结合在一起,把学生引入到生活中的点点滴滴去,要尽量给学生提供生活的素材,提供与其他同学合作的机会,来提高课堂学习的有效性,有效的课堂既掌握知识,也有助于学生学习数学能力的提高。我们在教学时平心静气,多多去在知识的海洋中探索,及时反思与评价,不断完善,积极的落实新课标,学生的素质才能得到全面提升。提高小学低年级数学教学实效性的途径和方法还很多,还需要我们在教学中做个有心人,多发现、多积累、多探索,才能有效提高课堂教学效果和学生创新的积极性。

篇14:关于课堂教学模式学习心得总结

林崇德教授认为,学生的学习过程是一种运用学习策略的活动。强调和重视学习策略就是承认学生在学习过程中的主体性,强调学生在学习活动中的积极性作用和能动作用。正因为如此,结合学科教学向学生传授学习策略就是要改变“以教师讲授为中心”的课堂教学模式,代之“以学生自主学习为主”的课堂教学模式。没有学生自主的学习活动,就没有学习策略的获得。

一、搭建平等愉悦的课堂平台

1、以一颗童心对待学生。语文教师若能以一颗童心,把自己当成是学生中的一员,搭建真诚与学生交流沟通的平台。学生不把教师当成严肃的另一称谓,我想这样的课堂是愉悦的。老师在课堂可以跟学生做比赛;老师允许学生有自己独特的感受和思想;做什么事能够以商量的口吻和学生对话……不管做什么事,让学生觉得他也有决定权,让学生信任老师,同时又不迷信老师。我想给了学生发展和想象的空间,让学生在课堂也敢说和想说,最后才能实现会说。

2、以一颗真诚的心对学生。“诚信是金”,我们老师总是这样教学生。我们可不可以这样教自己呢?以我的实际而言,鄙者自认为是教良心书的老师。可真要谈与学生之间的诚信,说来还是很惭愧的。看一些教育名家之话,无论自已有多忙,和学生约定的事总是必修课。其实学生是很认真的。也许我们会忘记了自己说的一句不经意的话、一个自己不以为然的承诺,可学生是不会忘记的。

3、以一颗欣赏的心对学生。学生毕竟是学生,是来学知识的。同时他们的年龄还处于不成熟阶段,这是老师不要对他们要求太高。试想幼儿大班的孩子说1+2=?总是想很久,可到小学一年级时他自然就懂了。我们老师若能在课堂中,对学生的低智问题,或者说在我们看来是太容易的问题,多给学生一些肯定和鼓励,对他们来说是会欣喜若狂的。给学生鼓励,欣赏学生就是让学生体验成功感。谁不想成功?

4、以一颗平静的心对学生。老师是成人,来自生活、工作的压力总是有的。也许刚刚受了领导的骂,或者和家里人刚刚闹了别扭,千万不要把这种情绪带进课堂。常发怒和激动的人是不易从事老师这个工作的。想想学生来学校的目的,不是听老师的牢骚的。不管发生天大的事,课堂中我们一定要记住此时要忍,不要让学生感觉到你的不快和不愿意。虽然老师也是常人,也有喜怒哀乐,但是课堂上的老师便是一位忍者。所以,语文老师是“不以物喜,不以己悲”呀。

二、创设积极向上的课堂氛围

1、课堂氛围是轻松的。在从接受教育的学生角色转换为引导学生学习的老师角色转换过程中,深刻体会到,任何人都是想耍的。我们试想如果都“耍”了也都各司其职完成了自己的任务,那不是一举两得?办法是有的!那就是师生把上课当成一种游戏“耍”。语文课堂应该是有色彩的。首先教室的布置是师生喜欢的,可以贴上各自喜欢的图片,唱一些大家喜欢的歌曲,说一些“窝里斗的黑话”,当然这些必须符合《中学生日常行为规范》。其实就是把课堂延伸一点,活跃一点。

2、课堂氛围是积极的。语文课堂本身就是一个无穷的资源。上小说课,我们可以分角色朗读;上散文课,我们可以让优生品味美句;上说明文课,我们可以让学生“以文说物”;上议论文课,我们可以让学生开辩论会,明是非。

3、课堂氛围是有经验可循的。叶老说“凡为教者必期于达到不教的目的”。授之以鱼不如授之以渔嘛!教给学生方法,让学生觉得语文是博大精深,但也是有点可找的。做什么事,都有一种新鲜感。教师当在学生“新鲜”的时候教给经验,当学生不“新鲜”的时候让学生自已摸到石头过活。语文是语言,也不只是语言;语文是思维,也不只是思维。语文其实就是每个人自己独自专有的唯一财富。

三、培养良好的语文兴趣

1、语文老师的知识要多。语文老师是杂家的理论,在很多教育书上都看过。正如贾志敏所说“一位称职的语文老师应该是半个作家,半个评论家,半个语言学家,半个导演,半个演员,半个书法家,半个播音员……”这样看来似乎对我们语文老师太苛刻了,可反过来看这样的“全能王”不正是学生的偶像吗?所以培养学生的语文兴趣,第一点还得从我们老师自身做起,不断充电。

2、语文课堂的导入要美。“良好的开端是成功的一半”。语文老师应利用好丰富的语言文字,创设诗意的语文课堂开端。有人把语文课堂比为田野。我们的语文,我们的田野。作为耕地的语文老师,可以让一个田里既种花生又种玉米嘛。学生有取不完的果实,试想他们舍得休息吗?

3、语文课堂板书要精。精言妙语,去粗存细。一堂语文课学生不可能全部个个精力集中,语文本身也是说不完道不尽的。所以语文老师要敢于取舍。泛泛而谈,学生必将是什么也没有学到。所以语文的“一课一德”就要在板书上大做文章。说简单一点,我的理解板书完全是学生读老师改写的内容。板书的一点小错误完全可以导致学生的“谬以千里”的理解。学生的记忆类型是多种多样的,形象记忆是其实中较重要的一种。语文老师完全可以设计好板书,将“记”写在板书里,这不是一举两得吗?

总之,语文教学是丰富的,同时也是精彩的。怎样上好一堂语文课,应该是我们语文老师共同并一直思考的问题。做学习型的语文老师也显得更为迫切,也应该是我们语文追求的最高理想吧。以前爱把老师比做一桶水,我想这桶水再多都是无济于事的,语文老师应该是条河流才对,语文课堂应该是这条河沿岸的农田。语文课堂是有生命的农业劳动:原始、辛苦、平常、丰富的。怎样上好一堂语文课,其奥妙是说不尽道不远的,给语文老师也留下了很大的思考空间。在教学中我们必须根据教学的目的、内容和学生学习的实际情况,设计具体可行、易于操作的方案,特别要考虑什么样的语文教学内容适宜采用什么样的活动形式,怎样的活动过程对学生提高语文能力有促进作用。

篇15:会议总结英语模式

英文总结会议【1】

Concluding a Business Meeting

Action公司第三季会议在各部门负责人一一报告,以及与会者热烈讨论之后,即将落幕。会议主持人Jennifer,此时再度上台,为会议做个总结。

That wraps up the last item on the agenda.

Before we close, are there any questions? Fine.

In summary, I think we agree that this quarter's domestic sales figures show a marked trend in microwave sales.

Sam, I'd like you to follow up on that, please.

Let's see where this is heading.

Jane, thank you for the comprehensive PR status report.

I understand there are still a few problems to be worked out, but we all trust in your ability.

Ladies and gentlemen, the new design is satisfactory.

Let's keep Action ahead of the game.

Finally, I appreciate your comments and suggestions about the Canadian sales outlook.

This is our first opportunity to promote our products in North America, so we certainly want to cover every detail.

Well, then, that covers everything.

I make a motion to close the third quarterly meeting of Action Appliances.

Is there a second?

perl连接access数据库自动测试脚本语言

附录的范文

Perl 脚本的特点数据库教程

实Clifford分析中超正则函数的Plemelj公式

linux中find与rm实现查找并删除目录或文件linux操作系统

linux下perl,sed,shell批量替换文件内容linux操作系统

如何成为一名优秀的部门主管

外贸开发信范文

Shell编程之正则表达式详解

多途径可打造负载均衡

perl模式匹配总结
《perl模式匹配总结.doc》
将本文的Word文档下载到电脑,方便收藏和打印
推荐度:
点击下载文档

【perl模式匹配总结(推荐15篇)】相关文章:

词汇的起源之“HELLO”2023-04-23

面试题及答案2023-04-15

Excel服务器教程2023-10-20

seo面试题与答案2023-02-15

社区面试题及答案2022-06-16

hr面试题及答案2022-10-01

成为一名教师的计划2023-03-01

调整word空格间隔大小及每个空格所占的字符数2022-09-17

也谈跨站脚本攻击与防御脚本安全2023-12-17

python对指定目录下文件进行批量重命名的方法2022-07-26

点击下载本文文档