2014-12-02 60 views
0

我的任務是在C#中編寫一個解析器,將字符串轉換爲html代碼。現在,我解析使用正則表達式字符串,所以,我的代碼如下所示:正則表達式除符號外的所有字符和新行

Regex regex = new Regex(@"\n?\[s=(.*)?\](?:\n?(.*)?\n?)?\[\/s\]\n?"); 
MatchCollection matches = regex.Matches(CurrentPage.FAQ); 

foreach (Match match in matches) 
{ 
    <div class="slider"> 
     <div class="n">@match.Groups[1].Value</div> 
     <div class="tt">@Html.Raw(match.Groups[2].Value.Replace("\r", "<br />").Replace(" ", "&nbsp;"))</div> 
    </div> 
} 

的問題是,正則表達式\n?\[s=(.*)?\](?:\n?(.*)?\n?)?\[\/s\]\n?只有當字符串看起來像有效。

[s=hello]This is demo text![/s] 

如果在文本中有apears是一個新行,它不驗證。例如

[s=hello] 
    This is demo list 
      1. Hello world! 
      2. List item 
[/s] 

我想修改我的表達\n?\[s=(.*)?\](?:\n?((.|\n)*)?\n?)?\[\/s\]\n?但字符串可以包含一個或多個[S]的項目,所以它會驗證它作爲一個

[s=hello](BEGINING TO VALIDATE FROM HERE)This is demo text![/s] 
[s=hello] 
    This is demo list 
      1. Hello world! 
      2. List item 
(TO HERE)[/s] 

這就是爲什麼它驗證它作爲項目。

回答

1

使用類似下面的負向前視圖,並且不要忘記啓用DOTALL (?s)修改器,以便在您的正則表達式中也可以匹配即使是換行符。

@"(?s)\[s=([^\[\]]*)\]((?:(?!\[\/s]).)*)\[\/s]" 

DEMO

相關問題