Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Общие вопросы по .NET и C# > регулярное выражение


Автор: nmn 17.2.2010, 13:47
Код

string val = @"aaaa bbbb";
            string pattern = @"(a*|b*)";

            Console.WriteLine("text: {0}", val);
            Console.WriteLine("pattern: {0}\n", pattern);

            if (Regex.IsMatch(val, pattern, RegexOptions.IgnoreCase))
            {
                MatchCollection mms = Regex.Matches(val, pattern, RegexOptions.IgnoreCase);

                foreach (Match mm in mms)
                {
                    Console.WriteLine("value: {0}", mm.Value);

                    Console.WriteLine("captures:");
                    foreach (Capture c in mm.Captures)
                        Console.WriteLine("\t{0}", c);

                    Console.WriteLine("groups:");
                    foreach (Group g in mm.Groups)
                        Console.WriteLine("\t{0}", g);
                     //*//*/*//*//*//*
                }
            }
            else Console.WriteLine("nothing");//*/


это производит такой вывод:

Код

text: aaaa bbbb
pattern: (a*|b*)

value: aaaa
captures:
        aaaa
groups:
        aaaa
        aaaa
value:
captures:

groups:


value:
captures:

groups:


value:
captures:

groups:


value:
captures:

groups:


value:
captures:

groups:


value:
captures:

groups:



почему нет bbbbb?

Автор: mrbrooks 17.2.2010, 14:44
Код

string val = "aaaa bbbb";
string pattern = @"\S[a|b]*";
MatchCollection mms = Regex.Matches(val, pattern, RegexOptions.IgnoreCase);
//...

Автор: DjoNIK 17.2.2010, 15:27
mrbrooks, он же там еще группы пытается выделить. Разве здесь выручит обычный
Код

string pattern = @"\S[a|b]*";


Цитата(nmn @  17.2.2010,  13:47 Найти цитируемый пост)
почему нет bbbbb? 

Точно не помню, но там есть такое понятие, как жадные и ленивые квантификация. Не может ли это быть причиной?

Автор: Heinzz 17.2.2010, 17:33
Цитата(nmn @  17.2.2010,  13:47 Найти цитируемый пост)

почему нет bbbbb? 


string pattern = @"[a|b]*"; - работает

Автор: nmn 17.2.2010, 18:13
можно в двух словах что такое группы smile
цель не составить работающее выражение, а разобраться почему это себя ведет не так как ожидается

Автор: diadiavova 17.2.2010, 20:00
nmn, я думаю, что проблема в том, что паттерн составлен таким образом, что ему может соответствовать даже пустая строка. Посмотри что выводит вот этот код сам всё увидишь
Код

        static void Main(string[] args)
        {
            var val = "aaaa bbbb";
            var re = new Regex("(a*|b*)");
            var ms = re.Matches(val);
            Console.WriteLine("Mathches count: " + ms.Count);
            foreach (Match m in ms)
            {
                
                Console.WriteLine("start: {0}; length: {1}; value: {2}",m.Index,m.Length,m.Value);
            }
            Console.ReadKey();
        }
 Тебе надо просто заменить в паттерне звёздочку плюсиком a+|b+. И скобки там не нужны, они ничего не дают.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)