[码海拾贝 之Perl]在字符串数组中查找特定的字符串是否存在
2014-10-14 08:03
344 查看
前言
检索一个字符串是否存在于一个数组中, 最基本的想法应该就是对数组进行循环, 逐个判断数组的每个元素值和给定的值是否相等。(在Java语言还可以把数组转成 List , 在 list 中直接有 contains 方法可以使用)
看一段简单的代码:
my @arr2 = qw(str1 str2 str3 str4); foreach(@arr2) { if($_ eq "str2") { print "str2 exist in Array!\n"; last; } }
这段代码看起来挺简洁,也不难理解。 但是在Perl 在还有另外一种方法,只需要一行代码就能达成这样的效果。 就是使用 grep 函数
grep 简介
grep 的全称是 Global Regular Expression Print, 翻译一下是全局正则表达式版本。如果使用过Linux命令的话对这个词应该不陌生。
看一个常见的linux 命令
ps -ef | grep javaps -ef 是查看所有的进程
加上 grep java 的意思是 搜索系统进程中包含 java 名字的进程。
也就是说在linux 中, grep 能使用正则表达式搜索文本, 并把匹配的行打印出来。
触类旁通, 在Perl 中 grep 函数的作用也类似
Perl grep 函数
在Perl 中 , grep 函数的调用方式有两种:方式1. grep BLOCK LIST
方式2. grep EXPT, LIST
BLOCK: 表示一个Code 块, 通常用 {}表示;
EXPR 表示一个表达式, 通常是正则表达式
LIST: 要匹配的列表
grep函数对列表里的每个元素进行BLOCK或EXPR匹配,它遍历列表,并临时设置元素为$_。
在列表上下文里,grep返回匹配命中的所有元素,结果也是个列表。
在标量上下文里,grep返回匹配命中的元素个数。
比较一下下面的代码:
my @arr3 = qw(str1 str2 str3 str4 str11); my $str = "str1"; my $result =grep /^$str/, @arr3; my @result2 =grep /^$str/, @arr3; print "grep result=$result \n"; # 返回个数 print "grep result2=@result2 \n"; # 返回元素
这里在数组中匹配以str1 开头的字符串元素
(提示 在正则表达是中:^-- 表示开头 , $ 表示结尾 )
所以要精确匹配到某个字符串, 使用如下方式:
my $result =grep /^$str$/, @arr3;
到此 , 标题所给出的议题也就达成了。
相关文章推荐
- [码海拾贝 之Perl]在字符串数组中查找特定的字符串是否存在
- [码海拾贝 之Perl]在字符串数组中查找特定的字符串是否存在
- php 查找数组中是否存在某项,并返回指定的字符串,可用于检查复选,单选等
- 查找指定字符串在数组中是否存在
- jquery获取class的值加入到数组,并判断数组中是否存在特定字符串
- 一月十日练习习题,1数组数据存入字典并输出2降序 和倒叙 输出数组中内容3对字符串当中信息进行查找是否存在4 把数组当中信息按照中文排序
- php数组函数序列之in_array() - 查找数组中是否存在指定值
- 【php数组函数序列】之array_key_exists() - 查找数组键名是否存在
- javascript版的in_array函数(判断数组中是否存在特定值)
- matlab 判断cell数组里是否存在一个字符串
- 【php数组函数序列】之in_array() - 查找数组值是否存在
- 面试题-查找一个数组是否存在数目大于一半的数
- 二叉树 遍历|统计叶子节点|求深度|交换左右子树|查找是否存在某个特定叶子节点练习题
- 在一个二维有序数组中,查找指定的数据是否存在
- 查找数组中是否存在任意三个数可组成三角形的算法
- 查询字符串数组中是否存在指定的Val
- 【php数组函数序列】之in_array() - 查找数组中是否存在指定值
- 查找一个数是否存在于一个数组中。该数组分两段有序,第一段的数都大于第二段的数。
- 利用空间换时间来快速查找字符是否存在某个字符串里
- php查找字符串是否存在