Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 模式到模式列表_Javascript_C#_Regex_Pattern Matching - Fatal编程技术网

Javascript 模式到模式列表

Javascript 模式到模式列表,javascript,c#,regex,pattern-matching,Javascript,C#,Regex,Pattern Matching,实际上,我有这样一个例子,我必须验证是否存在重叠模式(可能是正则表达式或其他东西) 我相信这里的重叠匹配是“123?”,“123*”和“*23*” 通配符对于任何尾随字符限制为“*”,对于任何1个长度限制为“?” 顺便说一句,这是用于数字格式的,因此也可以在数字模式/格式中包含文字破折号(最多) 这可以通过正则表达式或其他方法实现吗?如果可能,使用C#/Javascript 请对我错过的任何信息发表评论 TIA现在只想分享我的解决方案,但这是通过C#实现的 静态字符串重新填充(字符串输入) {

实际上,我有这样一个例子,我必须验证是否存在重叠模式(可能是正则表达式或其他东西)

我相信这里的重叠匹配是
“123?”
“123*”
“*23*”

通配符对于任何尾随字符限制为
“*”
,对于任何1个长度限制为
“?”

顺便说一句,这是用于数字格式的,因此也可以在数字模式/格式中包含文字破折号(最多)

这可以通过正则表达式或其他方法实现吗?如果可能,使用C#/Javascript

请对我错过的任何信息发表评论


TIA

现在只想分享我的解决方案,但这是通过C#实现的

静态字符串重新填充(字符串输入)
{
返回inp.Replace(“*”,“*”)。Replace(“?”,“.”)。Replace(“-”,@“\-”);
}
静态字符串重新填充2(字符串输入)
{
返回inp.Replace(“*”,“*”)。Replace(“?”,“.”)。Replace(“-”,”);
}
静态void Main()
{
变量模式=新字符串[]{“8888*”、“8889*”、“8888*”、“8899*”、“8988*”、“8989*”、“8989*”、“8999*”、“7898*”、“7899*”、“8888-8*”、“88*”;
字符串ar=@“888?-*”;
List res=新列表();
布尔mat1,mat2;
Regex reg1、reg2;
foreach(模式中的var reg)
{
reg1=新的正则表达式(regRep(reg));
reg2=新的Regex(regep(ar));
mat1=reg1.IsMatch(ar);
mat2=reg2.IsMatch(reg);
//标准匹配
if(mat1 | | mat2)
{
res.Add($“{ar}std与{reg}匹配”);
}
其他的
{
//强制匹配
reg1=新的Regex(regRep2(reg));
reg2=新的Regex(regRep2(ar));
mat1=reg1.IsMatch(ar);
mat2=reg2.IsMatch(reg);
if(mat1 | | mat2)
{
res.Add($“{ar}frc与{reg}匹配”);
}
}
}
}
//结果
计数=5
[0]:“888?-*frc与8888*匹配”
[1] :“888?-*frc与8889*匹配”
[2] :“888?-*frc与8888?8匹配”
[3] :“888?-*std与888?-8匹配”
[4] :“888?-*std与*88*匹配”

现在这个对我来说很有用,我希望有人也会,如果不是的话,更好。谢谢

你好,我无法理解你想要实现的目标。请详细说明。我想你需要具体说明你想涵盖多少语法;如果我们限制在
?*.
,这是可行的,但是如果你进入复杂的前瞻和捕获组,这将很难做到。@KenY-N嗨Kenny,我想我只限于8位数字或最多带破折号的数字格式,所以对于通配符和其他东西,我只限于长度的星号和问号
12?
?@revo中的意思是什么?我刚刚编辑过,希望它能进一步澄清问题
string pattern = "123*"
string[] patterns = new string[]  { "123?", "123*", "12?", "*23*" }
static string regRep(string inp)
{
    return inp.Replace("*", ".*").Replace('?', '.').Replace("-", @"\-");
}

static string regRep2(string inp)
{
    return inp.Replace("*", ".*").Replace('?', '.').Replace("-", ".");
}

static void Main()
{
    var patterns = new string[] { "8888*", "8889*", "8898*", "8899*", "8988*", "8989*", "8989*", "8999*", "7898*", "7899*", "8888?8", "888?-8", "*88*" };
    string ar = @"888?-*";

    List<string> res = new List<string>();

    bool mat1, mat2;
    Regex reg1, reg2;
    foreach (var reg in patterns)
    {
        reg1 = new Regex(regRep(reg));
        reg2 = new Regex(regRep(ar));

        mat1 = reg1.IsMatch(ar);
        mat2 = reg2.IsMatch(reg);

        // standard matching
        if (mat1 || mat2)
        {
            res.Add($"{ar} std matched with {reg}");
        }
        else
        {
            //forced matching
            reg1 = new Regex(regRep2(reg));
            reg2 = new Regex(regRep2(ar));
            mat1 = reg1.IsMatch(ar);
            mat2 = reg2.IsMatch(reg);

            if (mat1 || mat2)
            {
                res.Add($"{ar} frc matched with {reg}");
            }
        }
    }
}
//result
Count = 5
    [0]: "888?-* frc matched with 8888*"
    [1]: "888?-* frc matched with 8889*"
    [2]: "888?-* frc matched with 8888?8"
    [3]: "888?-* std matched with 888?-8"
    [4]: "888?-* std matched with *88*"