2013-06-20 63 views
0

我對Perl一無所知,但我真的只需要對markdown語法做一點點改變。所以我很抱歉我提出了一個非常基本的問題。自定義Perl Markdown來識別帶標題的註釋段落(newbie to perl)

我想創建一個定製的降價要做到這一點

<div class="note"> 
<b>My note title</b> 
My note texts 
</div> 

我發現this great post是能夠與筆記類中創建div,下面的語法:

~? This is a Note Block ~? 

~! This is a Warning Block ~! 

不過,我會喜歡能夠通過將標題封裝在某個符號中來指定該筆記的標題。類似下面:

~? #Title# 
This is a Note Block ~? 

下面是的Perl從崗位

sub _DoNotesAndWarnings { 
    my $text = shift; 

    $text =~ s{ 
      \n~([\!\?])  # $1 = style class 
      (.+?)   # $2 = Block text 
      ~[\!\?]   # closing syntax 
     }{ 
      my $style = ($1 eq '!') ? "Warning" : "Note"; 
      "<div class=\"$style\">" . _RunSpanGamut("<b>$style:</b> \n" . $2) . "</div>\n\n"; 
     }egsx; 

    return $text; 
} 

我應該如何修改這個代碼定製類?非常感謝您的幫助!

+1

你不能只使用多例子,直接添加標題? –

+0

你能指點我的例子嗎?我對這一切都很陌生。我確實嘗試修改這些代碼,但沒有成功。 –

回答

1

你想要什麼似乎是:

sub _DoNotesAndWarnings { 
    my $text = shift; 

    $text =~ s{ 
      \n~([\!\?])  # $1 = style class 
      (?:\s*\#([^\#]+)\#\s*)? # $2 = title, optional 
      (.+?)   # $3 = Block text 
      ~[\!\?]   # closing syntax 
     }{ 
      my $style = ($1 eq '!') ? "Warning" : "Note"; 
      my $title = $2 || $style; 
      "<div class=\"$style\">" . _RunSpanGamut("<b>$title:</b> \n" . $3) . "</div>\n\n"; 
     }egsx; 

    return $text; 
} 
+0

絕對太棒了!非常非常感謝你!如果你不介意給我解釋,那麼'$ 1'到'$ 3'變量是如何聲明或定義的?對我來說這絕對是個謎! –

+0

不客氣!每當你在一個捕獲組(括號'()')中使用一個正則表達式時,在開括號之後沒有序列questionmark-colon,也就是** not **'(?:)')時,組按照開括號(第一個左括號分隔$ 1',第二個$ 2等)的順序進入'$ 1','$ 2','$ 3'等等變量,它們全部自動聲明並且準備好使用。我建議你閱讀http://perldoc.perl.org/perlretut.html和http://perldoc.perl.org/perlre.html(按照該順序),這樣你就不會再這麼單飛了。 – Massa

+0

謝謝Massa! *擁抱* –