Regex 在什么情况下正则表达式才是解决问题的最佳方法?
我不确定杰夫是否创造了它,但这是一个笑话,说“哦,我知道我会使用正则表达式!”的人现在有了。我一直认为这意味着人们在非常复杂的环境中使用正则表达式Regex 在什么情况下正则表达式才是解决问题的最佳方法?,regex,Regex,我不确定杰夫是否创造了它,但这是一个笑话,说“哦,我知道我会使用正则表达式!”的人现在有了。我一直认为这意味着人们在非常复杂的环境中使用正则表达式 然而,在什么情况下正则表达式才是最好的答案?它们到底是解决问题的最佳方法还是唯一方法?正则表达式是解析没有解析器(即XML)的文本的好方法我用它为.htaccess文件或我的URL重写器项目中的mod_rewrite语法创建了一个解析器,例如如果你想比“*”或“?”更具体一些,比如“3个字母,2个数字,一个$符号,然后一个句点”,它们真的很好 这段引
然而,在什么情况下正则表达式才是最好的答案?它们到底是解决问题的最佳方法还是唯一方法?正则表达式是解析没有解析器(即XML)的文本的好方法我用它为.htaccess文件或我的URL重写器项目中的mod_rewrite语法创建了一个解析器,例如如果你想比“*”或“?”更具体一些,比如“3个字母,2个数字,一个$符号,然后一个句点”,它们真的很好 这段引语来自杰米·扎温斯基(Jamie Zawinski)的反Perl言论。我认为Perl以前做regex非常糟糕,但现在它似乎是很多程序的标准引擎 但同样的观点仍然适用。如果你不知道如何使用正则表达式,你最好不要尝试真正花哨的东西,否则你也会得到这些标签中的一个(见青铜列表);o)
它们适用于匹配或查找采用非常具体和简单格式的文本。例如,我所说的“简单”是指不嵌套且小于整个html规范。Rexeprs适用于:
- 文本格式验证(电子邮件、url、数字)
- 文本搜索/替换
- 映射(例如url模式到函数调用)
- 过滤某些文本(与替换相关)
- 解析过程中的词法分析
- 社会保险号码
- 电话号码(555-555-5555)
- 电子邮件地址(something@example.com)
- IP地址(但更复杂的是要确保它的有效性)
- 清理客户端上的数据输入 在对其进行消毒之前 服务器
- “搜索并替换”某些 包含模式的字符串
我确信我遗漏了很多其他案例。它们主要对高度结构化的文本解析有价值。如果使用命名组(以及大多数成熟的正则表达式系统中的选项),则可以使用一种功能强大且简洁的方法来处理字符串 这里有一个例子。考虑到NETSTAT在不同Linux OSES中的各种迭代,而NETSTAT的版本可以返回不同的结果。有时会有一个额外的列,如果日期/时间格式为,有时会有一个移位。正则表达式为您提供了一种强大的方法,可以用一个表达式来处理这个问题。将其与命名组相结合,您就可以检索数据,而无需像:
1) 在空格上拆分
2) 好的,netstat版本是X,所以add我需要将1添加到超过第5列的所有数组引用中。
3) 好的,netstat版本是Y,所以我需要确保对日期信息使用多个数组引用
恶心。在正则表达式中修复很简单:-)这不是社区wiki的另一种情况吗?它通常归因于Jamie Zawinsky。我对此投了赞成票,尽管包括电子邮件地址作为示例。。。电子邮件地址的验证非常复杂,而要用正则表达式来进行验证将是不可能破译的。