2010-07-16 30 views
0

我找匹配字符串的是前綴Perl的正則表達式幫助

/** 

的文件,並有一個後綴

*/ 

在兩者之間任意數目的字符/空格/換行符。

如:

/** anything 
    anything 
*/ 

我有m/(\/\*\*).*?(\*\/)/到目前爲止,但是這不處理換行符。我知道修復必須簡單,但我的正則表達式體驗非常有限。
獎金問題:有沒有人有一個很好的學習正則表達式的網站?

+3

'的perldoc -q comments' – ghostdog74 2010-07-16 13:48:21

+0

奧賴利對學習正則表達式一個偉大的書。你會猜一猜題目是什麼。 :) – Ether 2010-07-16 14:58:42

回答

3

添加後smodifier

m/(\/\*\*).*?(\*\/)/s 

但如果它是你在操作的源代碼,要小心:

print 'a string /**'; 
int a = b + c; 
print '*/'; 

// /** 
a = a - c; 
// */ 

真的是隻有一個在線資源,如果涉及到學習正則表達式:http://www.regular-expressions.info/

+0

請注意,我並不是說沒有其他優秀的在線資源,但是我發佈的那個應該足以讓任何新來正則表達式的人都能夠很好地理解如何使用正則表達式。 – 2010-07-16 13:55:42

+0

作品,也感謝網站。 – James 2010-07-16 14:14:43

0

沒有使用/ s與make'。'行爲不同,下面也應該工作:

m/(\/\*\*)(\r?\n|.)*(\*\/)/ 

對於學習perl的地方?

http://perldoc.perl.org/ http://perldoc.perl.org/index-tutorials.html 這是我最終的參考,總是。

但是,如果你不喜歡閱讀手動風格的東西,這是有點乏味。 嘗試Jeffrey Friedl的O'Reilly的Mastering Regular Expressions,這更有趣。

http://oreilly.com/catalog/9781565922570

+1

而不是'(\ r?\ n |。)',你可以這樣做:'[\ s \ S]'。 – 2010-07-16 16:02:49

0

你的特定的正則表達式(用換行)可與\/\*\*[\d\D]*?\*\/匹配的\D一個副作用是它匹配新行和以這種方式被使用。

在Perl中,您還可以使用Regexp::Common來查找各種源代碼註釋。

目前已經提到了一些最好的鏈接(弗裏德爾的書和http://www.regular-expressions.info/

我的網站的正則表達式的是這些:

  1. 的Perl perlre tutorial。 Perl的正則表達式的最佳介紹。
  2. 的Perl perlre Perl的正則表達式文檔
  3. 的Perl perlre quick reference快速入門指南
  4. Regular Expressions, A Favorite Parsetime
  5. Pattern Matching, Regular Expressions and Parsing Tutorials在Perlmonks
  6. Explain Regex
  7. RegExr在線正則表達式測試儀
  8. Regular Expression Library
  9. Regex Powertoy在線測試儀
  10. BRE and ERE參考
  11. Larry Wall的Apocalypse 5: Pattern Matching