[码海拾贝 之Perl]在字符串数组中查找特定的字符串是否存在
前言
检索一个字符串是否存在于一个数组中, 最主要的想法应该就是对数组进行循环, 逐个推断数组的每一个元素值和给定的值是否相等。
(在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 java
ps -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]在字符串数组中查找特定的字符串是否存在的更多相关文章
- 纯JS实现在一个字符串b中查找另一个字符串a出现的所有位置,并且不使用字符串的方法(递归)
问题:判断字符串A在中所有出现字符串B中(长度大于1)的索引.不得使用字符串方法indexof,substring等 有小伙伴在面试遇到了这个问题,乍一看如果使用使用字符串方法indexof,subs ...
- [Matlab] 如何在矩阵中查找特定的字符串
题目 A = {'abcd','efgh','ijkl'; 'bd3','skge','zxe2'}:怎样查找A中字符串的是否含有字符串"bd3",如有返回字符串所在的行号和列号. ...
- c# 获取字符串数组中最长的的字符串并输出最长的字符串
求字符串数组中最大长度的字符串: 实质就是比较字符串的长度: 方案一: class Program { static void Main(string[] args) { string[] array ...
- C#中如何排除/过滤/清空/删除掉字符串数组中的空字符串
C#中要如何才能删除一个字符串数组中的空字符串呢?随着微软对C#不断发展和更新,C#中对于数组操作的方式也变得越来越多样化.以往要实现过滤数组中的空字符串,都是需要实行循环的方式来排除和过滤.C#3. ...
- LeetCode第十四题-字符串数组中最长的共同前缀
Longest Common Prefix 问题简介: 编写一个函数来查找字符串数组中最长的公共前缀字符串,如果没有公共前缀,则返回空字符串"" 举例: 1: 输入: [“xwq” ...
- 使用C#删除一个字符串数组中的空字符串
C#中要如何才能删除一个字符串数组中的空字符串呢?随着微软对C#不断发展和更新,C#中对于数组操作的方式也变得越来越多样化.以往要实现过滤数组中的空字符串,都是需要实行循环的方式来排除和过滤.C#3. ...
- 07.C#中如何排除/过滤/清空/删除掉字符串数组中的空字符串
方式一:使用lambda表达式筛选过滤掉数组中空字符串 1 /// <summary> /// 使用lambda表达式排除/过滤/清空/删除掉字符串数组中的空字符串 /// ...
- 014 Longest Common Prefix 查找字符串数组中最长的公共前缀字符串
编写一个函数来查找字符串数组中最长的公共前缀字符串. 详见:https://leetcode.com/problems/longest-common-prefix/description/ 实现语言: ...
- 字符串数组 输入3个字符串,要求按由小到大的字母顺序输出; 输入n个学生的姓名和学号到字符串数组中,在输入一个姓名,如果班级有该生则返回其信息,否则返回本班无此人
输入3个字符串,要求按由小到大的字母顺序输出 如 输入franch england china,输出结果是china england franch 三个数排序输出,比较三个数的大小怎么做? a=18 ...
随机推荐
- luogu P1395 会议
题目描述 有一个村庄居住着n个村民,有n-1条路径使得这n个村民的家联通,每条路径的长度都为1.现在村长希望在某个村民家中召开一场会议,村长希望所有村民到会议地点的距离之和最小,那么村长应该要把会议地 ...
- Java字符串(String)
从表面上看,字符串就是双引号之间的数据,例如“微学苑”.“http://www.weixueyuan.net”等.在Java中,可以使用下面的方法定义字符串: String stringName ...
- 【数学】【HAOI2008】【BZOJ1045糖果传递】【BZOJ3293分金币】论数学的重要性
BZOJ1045和BZOJ3293一模一样两道题,在这里我用1045来讲. 1045: [HAOI2008] 糖果传递 Time Limit: 10 Sec Memory Limit: 162 MB ...
- zend studio9.0.3破解及汉化 windons版
注册码: 34E606CF10C3E4CF202ABCEAA9B0B7A64DD2C5862A514B944AAAB38E3EB8A5F2CD735A2AB4CF9B952590EFA62BA0AB2 ...
- CentOS 6与CentOS 7的区别收集
说明: 1.CentOS与Ubuntu没有什么可比性,底层都是Linux,并且Ubuntu在YY广泛的使用,这些并不能说明那个强大哪个不行,只要能解决问题的都是好家伙. 2.市面上教程基本都是基于6, ...
- 阿里云ECS在CentOS 6.9中使用Nginx提示:nginx: [emerg] socket() [::]:80 failed (97: Address family not supported by protocol)的解决方法
说明: 1.[::]:80这个是IPv6的地址. 2.阿里云截至到今天还不支持IPv6. 解决方式: 1.普通解决方式:开启IPv6的支持,不过这个方法在阿里云行不通. vim /etc/nginx/ ...
- Swagger简介,轻松构造restful api的文档
Swagger 是一款RESTFUL接口的文档在线自动生成+功能测试功能软件. Swagger 是一个规范和完整的框架,用于生成.描述.调用和可视化 RESTful 风格的 Web 服务.总体目标是使 ...
- 联想台式机启天m4350 启用intel vt-x
在vmware workstations10 64位上安装windows server 2012操作系统时,出现例如以下错误: 已将该虚拟机配置为使用 64 位客户机操作系统.可是,无法运行 64 位 ...
- Nginx 服务并发过10万的Linux内核优化配置
以下Linux 系统内核优化配置均经在线业务系统测试,服务器运行状态良好,用了一些时间整理,现和大家分享一下,如有那位高人看到配置上有问题,请给与指出! # Controls the use of T ...
- 前端打包利器:webpack工具
一.什么是WebPack,为什么要使用它? 1.为什要使用WebPack 现今的很多网页其实可以看做是功能丰富的应用,它们拥有着复杂的JavaScript代码和一大堆依赖包.为了简化开发的复杂度,前端 ...