• [码海拾贝 之Perl]在字符串数组中查找特定的字符串是否存在


    前言

    检索一个字符串是否存在于一个数组中, 最主要的想法应该就是对数组进行循环, 逐个推断数组的每一个元素值和给定的值是否相等。

    (在Java语言还能够把数组转成 List , 在 list 中直接有 contains 方法能够使用)

    看一段简单的代码:

    my @arr2 = qw(str1 str2 str3 str4);
    foreach(@arr2)
    {
    	if($_ eq "str2")
        {
        	print "str2 exist in Array!
    ";
        	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 
    ";            # 返回个数
    print "grep result2=@result2 
    ";       # 返回元素

    这里在数组中匹配以str1 开头的字符串元素

    (提示 在正则表达是中:^-- 表示开头  , $ 表示结尾 )

    所以要精确匹配到某个字符串, 使用例如以下方式:

    my $result =grep /^$str$/, @arr3;

    到此 , 标题所给出的议题也就达成了。


  • 相关阅读:
    CSS未知宽高元素水平垂直居中
    CSS(二)
    CSS(一)
    菜鸟学JS&JQuery(随笔二——jQuery提供的选择器、修改一个标签中的内容、操作标签的类属性)
    菜鸟学JS&JQuery(随笔一)
    webpack loader的加载顺序(从右向左,从下向上)
    padStart()方法,padEnd()方法
    说说 Vue.js 中的 v-cloak 指令
    用阿里云 DNS SDK 实现动态域名解析
    使用阿里云 dns sdk 解决电信公网ip自动变化问题;自己动手实现ddns
  • 原文地址:https://www.cnblogs.com/slgkaifa/p/6815071.html
Copyright © 2020-2023  润新知