【问题标题】:Perl Regex HelpPerl 正则表达式帮助
【发布时间】:2010-07-17 00:37:41
【问题描述】:

我正在寻找匹配文件中带有前缀的字符串

/**

并且有一个后缀

*/

中间有任意数量的字符/空格/换行符。

例如:

/** anything
    anything
*/

到目前为止,我有m/(\/\*\*).*?(\*\/)/,但这不处理换行符。我知道修复必须简单,但我的正则表达式经验非常有限。
额外问题:有没有人有一个学习正则表达式的好网站?

【问题讨论】:

  • O'Reilly 有一本学习正则表达式的好书。您可以猜测标题是什么。 :)

标签: regex perl


【解决方案1】:

在其后添加s modifier

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

但如果你操作的是源代码,请小心:

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

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

如果要学习正则表达式,确实只有一个在线资源:http://www.regular-expressions.info/

【讨论】:

  • 请注意,我并不是说不存在其他好的在线资源,但我发布的资源应该足以让任何刚接触 regex 的人更好地了解如何使用 regex-es .
【解决方案2】:

不使用 /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

【讨论】:

  • 代替(\r?\n|.),你可以这样做:[\s\S]
【解决方案3】:

您的特定正则表达式(带有换行符)可以与\/\*\*[\d\D]*?\*\/ 匹配\D 的副作用是它匹配换行符并且可以以这种方式使用。

在 Perl 中,您还可以使用 Regexp::Common 来查找各种源代码 cmets。

已经提到了一些最好的链接(Friedl 的书和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. 拉里·沃尔的Apocalypse 5: Pattern Matching

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-05-05
    • 1970-01-01
    • 2011-06-10
    相关资源
    最近更新 更多