linux 通过键盘输入一批字符串 对输入的字符串进行测试,判断是否为文...

linux 通过键盘输入一批字符串 对输入的字符串进行测试,判断是否为文...,第1张

#!/bin/bash

read -p "Enter an string:" str

if [ -f $str ]then

echo "yes"

else

echo "no"

fi

我这里一直是输出a的,现象都跟你描述的不一致啊。

如果改为:if [[ "$a" = "a*" ]]then ,才输出b。

你这里用的是通配符,其实可以用正则匹配

if [[ "$a" =~ "a.*" ]]then

这样也是输出a

一般地可以通过正则表达式库进行检测

也可以手动进行检测

常见的ip地址是点分十进制的字符串形式

类似

192.168.1.1

10.2.4.1

这种

四个部分每个部分的最大值是255

所以正则表达式简单点可以是

(\d+\.){3}\d+

但这样并不能完全正确地匹配ip地址

如果所要匹配的文件中确定出现的类似字符串为ip地址的话就完全没有问题

准确点可以

(\d{1,3}\.){3}\d{1,3}

然后再对每个数字进行判断

判断是否超出了ip地址的范围

下面是一个简单的使用正则表达式的代码

#include <stdio.h>

#include <string.h>

#include <pcre.h>

int main(int argc,char **argv)

{

    char *s="192.168.1.1"

    pcre *code

    int rc

    int ovector[2*3]

    const char *errptr

    const char *ip

    int erroffet

    char *p

    char buf[20]

    code=pcre_compile("(\\d{1,3}\\.){3}\\d{1,3}",0,

            &errptr,&erroffet,NULL)

    if((rc=pcre_exec(code,NULL,s,strlen(s),0,0,ovector,2*3)) > 0)

    {

        pcre_get_substring(s,ovector,rc,0,&ip)

        snprintf(buf,20,"%s",ip)

        pcre_free_substring(ip)

        for(p=strtok(buf,".")p != NULLp=strtok(NULL,"."))

        {

            if(atoi(p) > 255)

                goto end

        }

        printf("正确ip!\n")

        return 0

    }

end:

        printf("错误的ip!\n")

    pcre_free(code)

    return 0

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/8454898.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-16
下一篇 2023-04-16

发表评论

登录后才能评论

评论列表(0条)

保存