自由可用,经过良好调试的正则表达式

时间:2010-04-21 19:51:49

标签: regex

我正在阅读ICU documentation,并发现了这个好建议:

  

对于像这样的常见任务   免费定期的图书馆   表达得很好   调试。值得快点   在写一个新的之前搜索   表达

您经常参考哪些经过良好调试的正则表达式库?

我不太习惯http://regexlib.com表达式看起来没有那么好调试。除了用户评论和评级之外,它似乎没有QA流程。

5 个答案:

答案 0 :(得分:6)

正则表达式库(即使是那些经过充分测试的库)的问题在于,它们尚未在您的数据您的目的上进行测试。为他们的目的在其他人的数据上运行良好的正则表达式可能根本不适用于你。

http://www.regexbuddy.com/library.html处的屏幕截图确实显示了与2月30日无效日期匹配的正则表达式。正则表达式的注释解释了这一点。但是,在屏幕截图中,评论并不完全可见。

这是一个完美的例子,说明为什么你必须小心使用正则表达式库和复制和粘贴编程。如果您知道该文件从不包含\d\d/\d\d/\d\d\d\d之类的内容,则正则表达式99/99/9999可能完全可以从文件中提取日期。如果文件只包含有效日期和其他看起来不像日期的数据,那么简单的正则表达式就足以提取日期。即使数据可能包含无效日期,您也可以选择允许正则表达式匹配它们,并在处理正则表达式匹配的过程代码中过滤无效日期。

对于电子邮件地址,确定其是否有效的唯一方法是向其发送电子邮件并获得回复。即使没有退回邮件也不意味着电子邮件保存在某人的邮箱中,或者任何人都会阅读。正则表达式可用于过滤掉显然不是电子邮件地址的内容,因此您可以跳过发送验证邮件的更昂贵的步骤。正则表达式也可用于从文档或档案中提取电子邮件地址。但它确实无法说明invalid@regexbuddy.com是否是有效的电子邮件地址。它看起来像是,但事实并非如此。发送到此地址的电子邮件会保存到/dev/null

答案 1 :(得分:4)

我不能说RegexBuddy的好东西。它内有一个大型图书馆。 http://www.regexbuddy.com/library.html

它不是免费的,但是如果你在Windows机器上,这是非常值得的投资。

交互模式允许您实时调试自己的表达式 - 它有许多引擎(.NET,Perl等)。所以 - 它可以让您快速找到特定的闰年错误:)。

答案 2 :(得分:2)

我不同意马克。

他在技术上是正确的,但这取决于你在尝试使用正则表达式是否是可接受的风险时的确切背景。

不要让“足够好”的解决方案被杀死,因为你正在努力追求完美。

答案 3 :(得分:1)

否 - 不要使用正则表达式来解析电子邮件,即使它们已经“经过良好调试”。他们仍有可能无法工作。绝对使用旨在解析电子邮件的库,但远离正则表达式库。我已经看到一个声明完全遵循标准的电子邮件的正则表达式并且它有几页长并且警告说在应用它之前你必须先从电子邮件中删除评论(这需要第二个正则表达式)。

如果您坚持使用正则表达式来解析电子邮件,请将其接受无效地址,而不是拒绝有效地址。

答案 4 :(得分:1)

如果你花时间学习正则表达式,你将不需要表达式库。我记得有意识地决定学习正则表达式(几年前 - 用几十年的时间衡量叹息),并且自那以后它已经无数次付出了代价。

正则表达式并不难。它们只是一种小型编程语言。如果你可以编写代码,你可以学习正则表达式。对于任何有编程能力的人来说,一个坚实的学习日应该是充足的时间。

然后,一旦你了解它们,就可以做出明智的决定,确定它们何时是一个合适的解决方案。否则你只是把想法扔在墙上,希望其中一个坚持。另外,从头开始编写正则表达式可能比尝试在库中查找模式并确定它是否良好更快更容易。