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
一般地可以通过正则表达式库进行检测
也可以手动进行检测
类似
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
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)