[码海拾贝 之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 ...
随机推荐
- 模板:统计1~n内x的个数
http://noi.openjudge.cn/ch0105/40/ 40:数1的个数-拓展变形 查看 提交 统计 提问 总时间限制: 1000ms 内存限制: 65536kB 描述 给定一个十进 ...
- Codeforces 825F - String Compression
825F - String Compression 题意 给出一个字符串,你要把它尽量压缩成一个短的字符串,比如一个字符串ababab你可以转化成3ab,长度为 3,比如bbbacacb转化成3b2a ...
- Redis数据类型、两种模型、事务、内部命令
1.redis数据类型 a.字符串,使用场景:常规key-value缓存应用 set name lixiang get name append name 123 # 字符串追加 mset key va ...
- [Lydsy1710月赛] 小B的数字
神TM 又又又又是构造题..... 很简单的化简就是,把2^k[i]都换成k[i] ,然后就可以得出 对于任意的i,k[i] * a[i] >= ∑k[]. 最优的构造肯定是使 k[i] = ...
- [ZJb417]区间众数
题目大意: 给定一个长度为$n(1\leq n\leq10^5)$的正整数序列$s(1\leq s_i\leq n)$,对于$m(1\leq m\leq10^)$次询问$l,r$,每次求区间$[s_l ...
- T-SQL语言基础(转载)
本文转自http://www.cnblogs.com/Jolinson/p/3552786.html 这里的摘抄来自<Microsoft SQL Server 2008技术内幕:T-SQL语言基 ...
- Springboot集成BeanValidation扩展一:错误提示信息加公共模板
Bean Validator扩展 1.需求 在使用validator时,有个需求就是公用错误提示信息,什么意思? 举个例子: @NotEmpty非空判断,在资源文件中我不想每个非空判断都写”不 ...
- JAVA常见算法题(十五)
package com.xiaowu.demo; /** * * 输入三个整数x,y,z,请把这三个数由小到大输出. * * @author WQ * */ public class Demo15 { ...
- Ext JS 5 gpl版本 官方原版的下载方法
先进入官网: 然后在导航的Products中选择Sencha Ext JS,会看到以下页面: 这时候不要单击Download按钮,而是要单击导航中的DETAILS,页面切换后,就可在底部看到GPL版本 ...
- Linux下查找、删除、替换命令
查看某目录下所有文件的个数: [root@localhost1 opt]# ls -l |grep "^-"|wc -l 查看某目录下所有文件的个数,包括子目录里面的: [root ...