题目描述
问题描述:在计算机中,通配符一种特殊语法,广泛应用于文件搜索、数据库、正则表达式等领域。现要求各位实现字符串通配符的算法。
要求:
实现如下2个通配符:
*:匹配0个或以上的字符(字符由英文字母和数字0-9组成,不区分大小写。下同)
?:匹配1个字符
输入:
通配符表达式;
一组字符串。
输出:
返回匹配的结果,正确输出true,错误输出false
本题含有多组样例输入!
输入描述:
先输入一个带有通配符的字符串,再输入一个需要匹配的字符串
输出描述:
返回匹配的结果,正确输出true,错误输出false
示例1
输入
te?t*.*
txt12.xls
输出
false
const readline = require('readline');
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
// toFixed(1) parseFloat
let inArr = [];
rl.on('line', function (input) {
inArr.push(input);
// rl.close();
});
rl.on('close', function() {
let lg = 0;
// console.log("123465".substring(1));
while(lg<inArr.length){
let a = is_match(inArr[lg],inArr[lg+1]);
console.log(a);
lg += 2;
}
// console.log(a());
process.exit(0);
});
function is_match(src, input){
// console.log(src.length,input);
// 正常结束
if(src.length==0 && input.length == 0){
return true;
}
// 最后一个为*
if(src[0] == "*" && src.length == 1){
return true;
}
if(src.length == 0||input.length==0){
return false;
}
if(src[0] == "?"){
return is_match(src.substring(1),input.substring(1));
}else
if(src[0] == "*"){
return is_match(src.substring(1),input) || is_match(src.substring(1),input.substring(1)) || is_match(src,input.substring(1));
}else
if(src[0] == input[0]){
return is_match(src.substring(1), input.substring(1));
}else{
return false;
}
}