Портирование регулярки - C#

Узнай цену своей работы

Формулировка задачи:

Здравствуйте! Есть одна регулярка, которую мне помог написать один хороший человек. Она прекрасно работает - https://regex101.com/r/8Fzyqc/2. То есть у меня есть рекурсивная регулярка и все парсится нормально, но когда я это вставляю в си# - 1) Подсвечиваются ошибки в регулярке 2) А есть я ее немного изменю -

@(?<m>\\w+)\\((?<d>(?:[^()]+|\\((?<m>)\\))*)\\)

Парсер видит только внутренние вхождения, а внешнее пропускает. Например - @id1(@id2(Boom)) - id2 увидит и обработает, а внешний не видит. Видимо, я не правильно поменял регулярку... Подскажите, что с ней не так? PS: изначально искал помощь и получил ее в разделе php. Собственно там мне и помогли, но портировать под c# я ее не смог. Вот тема - ошибка в регулярке

Решение задачи: «Портирование регулярки»

textual
Листинг программы
    var text = @"
        dd @id1(Hello c @id2(Boom @id3(B d) daa) ada ) dad
@id2(Boom) @id2(Boom) 
    ";
 
    var rawPattern = @"
@\w+
 
(?<value>
    (
        (
            ( ?'Open'\( )
            [^()]*
        )+
        (
            ( ?'Close-Open'\) )
            (?(Open)[^()]*)
        )+
    )+
)
 
(?(Open)(?!))
";
    rawPattern = Regex.Replace(rawPattern, @"\s", "");
 
    var regex = new Regex(rawPattern, RegexOptions.Singleline);
 
    regex
        .Matches(text)
        .Cast<Match>()
        .Select(m => m.ToString() + " , value=" + m.Groups["value"].Value)
        .ToList()
        .ForEach(Console.WriteLine);

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

13   голосов , оценка 3.462 из 5