在什么情况下正则表达式真的是解决问题的最佳方法?

时间:2008-10-23 15:57:15

标签: regex

我不确定杰夫是否会创造它,但这是开玩笑说那些说“哦,我知道我会用正则表达式!”的人。现在有two problems。我一直认为这意味着人们在非常inappropriate contexts中使用正则表达式。

但是,在什么情况下正则表达式真的是最好的答案?他们真正解决问题的最佳或唯一方法是什么问题?

6 个答案:

答案 0 :(得分:4)

RexExprs适用于:

  • 文本格式验证(电子邮件,网址,号码)
  • 文字搜索/替换。
  • 映射(例如,url模式到函数调用)
  • 过滤一些文本(与替换相关)
  • 解析期间的词法分析。

答案 1 :(得分:4)

它们可用于验证具有以下模式的任何内容:

  • 社会安全号码
  • 电话号码(555-555-5555)
  • 电子邮件地址(something@example.com)
  • IP地址(但要确保它有效会更复杂)

所有这些都有模式,并且很容易通过RegEx验证。

它们很难用于具有逻辑而不是信用卡号码之类的模式,但它们仍可用于进行客户端验证。

那么最好的方法呢?

  • 清理客户端上的数据输入 在对他们进行消毒之前 服务器
  • 进行“搜索和替换” 包含模式的字符串

我确信我错过了很多其他案例。

答案 2 :(得分:0)

正则表达式是解析没有解析器(即XML)的文本的好方法我用它来为.htaccess文件或我的URL重写器项目{{3中的mod_rewrite语法创建解析器例如

答案 3 :(得分:0)

当你想要比“*”或“?”更具体时,它们真的很好。比如“3个字母,然后2个数字,然后是$符号,然后是一个句号”

引用来自Jamie Zawinski的反Perl咆哮。我认为Perl曾经非常糟糕地使用正则表达式,但现在它似乎是许多程序的标准引擎。

但同样的情绪仍然适用。如果你不知道如何使用正则表达式,你最好不要尝试其他明智的东西,你也可以得到其中一个标签(见铜牌); o)

https://stackoverflow.com/users/730/keng

答案 4 :(得分:0)

它们适合匹配或查找采用非常特定简单格式的文本。例如,“简单”是指不是嵌套的,而是小于整个html规范。

答案 5 :(得分:0)

它们主要用于高度结构化的文本解析。如果您使用了命名组(以及大多数成熟的正则表达式系统中的选项),那么您将拥有一种非常强大且清晰的方法来处理字符串。

这是一个例子。考虑netstat在不同的Linux操作系统的各种迭代中,netstat的版本可以返回不同的结果。有时候会有一个额外的列,如果有日期/时间格式,有时会有一个班次。正则表达式为您提供了一种使用单个表达式处理它的强大方法。结合命名组,您可以检索数据,而不是黑客,如: 1)分隔空格
2)好吧,netstat版本是X所以添加我需要在第5列之后的所有数组引用中添加1 3)好吧,netstat版本是Y所以我需要确保我使用多个数组引用作为日期信息。

YUCK。很容易在正则表达式中修复: - )