TienVII Ответов: 2

Почему мое регулярное выражение возвращает null с длинной строкой в C#?


У меня есть проект, связанный с регулярным выражением. Чтобы перейти к проекту, я тестирую простой шаблон регулярного выражения (.+) на C#. Очевидно, что он будет соответствовать любому символу, ожидающему \n и \r.
Во-первых, я сопоставляю его с короткой строкой (ее длина ниже 5000 символов), я работаю правильно, но когда я использую длинную строку (ее длина превышает 10000 символов, нет пробела, нет специальных символов), она ничего не возвращает.
Я меняю шаблон на ([Аризона]+) с помощью строки, содержащей только символы a и z длиной 10000, она также ничего не возвращает (правильно с & lt;5000 символами)
Строка, которую я использую для тестирования с шаблоном, создается моим кодом, поэтому я уверен, что в ней нет специальных символов.
Я думаю, что в C#есть предел! Как я могу сопоставить длинную строку в C#?

Что я уже пробовал:

Я пишу мини-инструмент, чтобы проверить это!
[^]
[^]

Я также ищу в документе MSDN, но там нет ничего об этой проблеме ;(

2 Ответов

Рейтинг:
20

OriginalGriff

Для меня это прекрасно работает:

try
    {
    string inp1 = new string('X', 5000);
    Regex reg = new Regex("(.+)");
    Match m1 = reg.Match(inp1);
    Console.WriteLine(m1.Success ? m1.Value.Length.ToString() : "No match");
    string inp2 = new string('X', 10000);
    Match m2 = reg.Match(inp2);
    Console.WriteLine(m2.Success ? m2.Value.Length.ToString() : "No match");
    string inp3 = new string('X', 100000);
    Match m3 = reg.Match(inp3);
    Console.WriteLine(m3.Success ? m3.Value.Length.ToString() : "No match");
    }
catch (Exception ex)
    {
    Console.WriteLine(ex.Message);
    }

Дает:
5000
10000
100000


Рейтинг:
2

TienVII

Я нашел проблему. Я использую listbox для отображения своего результата, но он ограничивает размер 1 элемента.
Спасибо!