Regular Expression matching doesn't work

Hi all I am pretty new to regex world I am trying to match this regex

"\bAsm_vidEmfUpdate_2 (0, ?unknown?)\b"

with this string "Asm_vidEmfUpdate_2 (0, ?unknown?)".

I tried to inject '\' before characters '(' , ')' , '?' , ',' to be like this

"\bAsm_vidEmfUpdate_2 \(0\, \?unknown\?\)\b" but it doesn't work either

But it results in unmatching here is my code

string regexStr = "\bAsm_vidEmfUpdate_2 \(0\, \?unknown\?\)\b";

Regex regex = new Regex(regexStr);

string instr = "Asm_vidEmfUpdate_2 (0, ?unknown?)";
MatchCollection m = regex.Matches(instr); 
string str1 = m[0].Groups[0].Value; // ArgumentOutOfRangeException
Jon Skeet
people
quotationmark

No, it's matching correctly but you only have a single group (the whole string). So Groups[1] is invalid - if you ask for Groups[0] it's fine:

using System;
using System.Text.RegularExpressions;

class Program
{
    static void Main(string[] args)
    {
        string regexStr = @"Asm_vidEmfUpdate_2 \(0\, \?unknown\?\)";
        Regex regex = new Regex(regexStr);

        string instr = "Asm_vidEmfUpdate_2 (0, ?unknown?)";
        MatchCollection m = regex.Matches(instr); 
        string str1 = m[0].Groups[0].Value;
        Console.WriteLine(str1);
    }
}

It's unclear what you're trying to achieve though. Your regex doesn't allow for any flexibility, so you're effectively just asking for string.Contains. If you're trying to capture the different parts of the string, you might want something like:

using System;
using System.Text.RegularExpressions;

class Program
{
    static void Main(string[] args)
    {
        string regexStr = @"([A-Za-z_0-9]+) \((\d+), ([^\)]+)\)";
        Regex regex = new Regex(regexStr);

        string instr = "Asm_vidEmfUpdate_2 (0, ?unknown?)";
        Match m = regex.Matches(instr)[0];
        foreach (Group group in m.Groups)
        {
            Console.WriteLine(group.Value);
        }
    }
}

Output:

Asm_vidEmfUpdate_2 (0, ?unknown?)
Asm_vidEmfUpdate_2
0
?unknown?

(Note that group 0 is still the whole string...)

people

See more on this question at Stackoverflow