2013-01-20 23 views
3

我正在嘗試爲崇高文本創建新的語法定義。我已經制定了正則表達式來突出顯示每行內的匹配,但我希望匹配包含新行以及任何字符。下面是來自tmLanguage文件的單行範圍內所允許的正則表達式:Multiline崇高文本語言模塊定義

<key>match</key> 
<string>\{\+\+(.*?)\+\+[ \t]*(\[(.*?)\])?[ \t]*\}</string> 

我已經嘗試修改點匹配跨越多線,但它實際上並沒有出現捕捉整個塊()。我的理解是,修飾符?m:應該工作,但不是。

<key>match</key> 
<string>(?m:(\{\+\+(.*?)\+\+[ \t]*(\[(.*?)\])?[ \t]*\}))</string> 

有沒有辦法來聲明一個語言定義正則表達式,將跨多行匹配?

+0

你試過|。\ n –

+0

我不認爲這會給出正確的比賽,但我無論如何,它確實嘗試過。沒有運氣。 – Gabe

回答

4

使用單行修改代替:

<key>match</key> 
<string>(?s:(\{\+\+(.*?)\+\+[ \t]*(\[(.*?)\])?[ \t]*\}))</string> 

你誤解了(?m)修改。 你的正則表達式總是應用在一行上。

  • 使用多行修飾符意味着您正則表達式會考慮你的文字爲幾行(這是默認的行爲),那麼它會添加^(...)$在每行。
  • 使用單行改性劑,^(...)$不會添加,然後.將匹配\r\n