快捷搜索:  as  2018  FtCWSyGV  С˵  test  xxx  Ψһ  w3viyKQx

菲律宾葡京娱乐场:使用Perl常规表达式进行匹配



经久以来,Perl以其对老例表达式的固有支持,不停是异常盛行的文本处置惩罚对象。在这篇入门性文章中,我们将带领你简单懂得若何在你自己的法度榜样中应用老例表达式,实现加倍强大年夜的文本搜索和替代功能。

我们首先懂得最简单的老例表达式:匹配。假如在字符串中找到相匹配的模式,匹配操作就返回真值。是以下面的表达式:

$string =~ m/text/

只有在变量“$string”中的字符串包孕子字符串“text”时才返回真值。这是最基础的老例表达式,它对每个字符进行逐字匹配。当然,这只是对老例表达式感化的一个考试测验。以必要查找以“ext”结尾的四个字母的单词为例。为达到这个目的,我菲律宾葡京娱乐场们应用一个特殊的字符“.”,老例表达式中的句号奉告 Perl匹配此中的任何零丁的字符。是以下面这个表达式:

$string =~ m/.ext/

将与单词“text”和“next”匹配。

不过,这个表达式并非完美,由于它与包孕“ext”的更长单词的一部分相匹配,如“dextrous”和“flextime”。我们可以应用锚字符来限定匹配的位置。“^”字符匹配字符串的开首,是以:

$string =~ m/^.ext/

与“dextrous”匹配,但不与“context”匹配。

同样,“$”字符匹配字符串的结尾:

$string =~ m/.ext$/

与“context”匹配,但不与“dextrous”匹配。

假如你只盼望匹配以“ext”结尾的四个字母的菲律宾葡京娱乐场字符串,那么你可以组合应用上面的两个表达式,像这样:

$string =~ m/^.ext$/

现在,假如你必要匹配一组给定的字符,而不是句号位置的任何字符,那该怎么办呢?老例表达式经由过程应用方括号供给一个措施。以下面的表达式为例:

$string =~ m/^[tT]ext$/

这个表达式只与单词“text”和“Text”匹配。一对方括号将转换此中的任何单个字符。这个功能相称强大年夜,例如:

$string =~ m/[aeiouAEIOU]/

假如$string变量中含有元音,则上面的例子返回真值。

假如括号中的第一个字符是“^”,这时它就不是一个锚字符,而是履行“非”操作,匹配不在括号内的随意率性字符,是以假如$string变量中只包孕辅音或标点符号,可以对上面的例子进行调剂,使它返回真值:

$string =~ m/[^aeiouAEIOU]/

方括号符号还可以指定字符的范围,让你不必枚举一整串继续的数字或字母,例如,下面的例子匹配任何小写字母:

$string =~ m/[a-z]/

到现在为止,我们每次都是处置惩罚字符串中的一个字符,但许多环境下我们必要处置惩罚加倍繁杂的问题。我们应用“|”或分段操作达到这个目的。假设我们盼望反省$string变量中是否含有“next”或“previous”,我们可以应用下面的表达式:

$string =~ m/next|previous/

假如我们盼望在这个表达式中应用锚字符,那么我们必要将选菲律宾葡京娱乐场项组合起来,就像在算术中应用圆括号那样。是以,假如我们盼望只匹配字符串开首部分的“next”或“previous”,可以这样写表达式菲律宾葡京娱乐场:

$string =~ m/^(next|previous)/

我们把所有这些操作符叫做原子操作符,便是说,它们与一个零丁的字符相对应。不过,老例表达式的实际长度取决于操作的是轮回次数。为阐明这个问题,我们以确定一个字符串中是否包孕一个有效电话号码为例。我们可以应用“glob”操作符,它写作“*”。许多以某种形式应用敕令行的人都认识“*”用作通配符的环境,在Perl中它也有相似的用法,匹配任何数量的前一个字符构成的字符串。是以:

$string =~ m/a*/

匹配由随意率性个a构成的字符串。现在我们匹配随意率性个数字:

$string =~ m/[0-9]*/

这并不是我们所必要的表达式,由于它与随意率性数字,以致是零相匹配。我们本可以用“+”代替“*”,它匹配一个或几个开始的那个字符,但这无法办理查找到的数字太长或太短的问题。我们真正必要的是指定轮回的次数,在这个例子中为七次。这时我们可以应用大年夜括号:

$string =~ m/^[0-9]$/

这个结果更靠近我们的目的,它匹配包孕七个数字的字符串。大年夜括号有别的一些选项,使它们在指定轮回时功能加倍强大年夜,例如,你可以指定轮回范围:

$string =~ m/[0-9]/

这将匹配包菲律宾葡京娱乐场孕6个或8个数字的字符串,但假如我们用“”代替“”,就可以匹配6位或6位以上的字符串;而“”则匹配8位或8位以下的字符串。

我们再看一下那些电话号码,现在它能够正常匹配,但仍旧存在太多限定。不管什么时刻,在处置惩罚用户输入时,你必须指望人们以各类要领进行简单操作。

考试测验和预见一些加倍常见的电话号码款式可能是个好主见。举一个简单的例子,如号码“2391720”,它能够以“239-1720”或“239 1720”的形式输入。现在我们可以应用圆括号来匹配“-”或“”,但我们必要新操作符来处置惩罚根本没有分隔符的环境:即“?”操作符,表示前面可以有也可以没有字符。我们可以用下面的表达式匹配所有这三种款式:

$string =~ m/[0-9][- ]?[0-9]/

同样,我们查看一下办事部门的号码。澳大年夜利亚电话号码中有一个两位数的区号,我们鄙人面的表达式中增添它们:

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

这个表达式可以匹配“02 114 7682”这样的电话号码,而且,由于我们把区号部分放在圆括号中,使它成为可选内容,以是这个表达式还可以匹配前一个表达式匹配的款式。我们还可以做出更多改进,如把区号放在“(”和“)”中;然则,如你所见,你在表达式中增添越多选项,表达式就会越长越繁杂,是以到底是否增添更多选项,由你自己抉择。

下次我们将深入评论争论老例表达式的用法,包括替代、转换和若何建立你必要的Perl老例表达式法度榜样。

您可能还会对下面的文章感兴趣: