Я пытаюсь создать простой вики-парсер в C#, который будет совместим с trac wiki, но регулярное выражение убивает меня
Сначала мне нужно сопоставить не проанализированные части, поэтому я создал регулярное выражение, которое должно их перехватить:
(?<inlinecode>!?\{\{\{(?<inline>.*?)\}\}\})|(?<inlinecode2>!?`(?<inline2>.*?)`)|(?<definition>^\s+((?:`[^`]*`|\{\{\{(?:}{,2}[^}])*?\}\}\}|[^`{:]|:[^:])+::)(?:\s+|$))
Эта часть соответствует:
`test`
{{{test}}}
`{{{test`
{{{``test}}}
Но это не так (и должно быть)
{{{
test
}}}
{{{#!xxx
test
}}}
def::
some def
Чего мне не хватает RegEx - почти то же самое, что и trac для внутреннего использования.
1 ответ
Решение
Ваш шаблон регулярных выражений правильный. Вы должны просто включить модификатор "dot match linebreak" или поставить это (?:.|[\r\n])
вместо просто .
(Точка). Попробуйте это:
(?<inlinecode>!?\{\{\{(?<inline>(?:.|[\r\n])*?)\}\}\})|(?<inlinecode2>!?`(?<inline2>(?:.|[\r\n])*?)`)|(?<definition>^\s+((?:`[^`]*`|\{\{\{(?:}{,2}[^}])*?\}\}\}|[^`{:]|:[^:])+::)(?:\s+|$))
Приветствия.