我个人的经验是,正则表达式解决了无法以任何其他方式有效解决的问题,并且在一个字符串同样重要的世界中经常被要求,因为没有牢牢掌握这个主题将是我的充分理由考虑不雇用你作为高级程序员(一个大三学生总是被允许训练的余地).
然而.
关于经常性的"这是什么样的正则表达式?"的一些回应?类型问题表明,很多程序员发现它们介于难以理解和不透明之间.
这不是一个简单的indexOf或substring是一个更好的解决方案,这是一个技术问题,有时简单的方法是正确的,有时一个正则表达式,有时也没有(看你的HTML解析器问题).
这是关于理解正则表达式的重要性以及反正则表达式(即"现在他们有两个问题"这个问题)是值得的还是FUD.
应该期望程序员理解正则表达式吗?这是必需的技能吗?
编辑:以防万一不清楚,我不是在问我是否需要学习它们(我是信仰的捍卫者),但是反阵营是否是一个进化的死胡同或是否是一个不必要的利基像InstallShield这样的技能.
RE让你解决相对复杂的问题,否则你需要用回溯代码编写完整的解析器以及所有那些混乱的东西.我把RE的使用比作使用链锯来砍伐一棵树,而不是试图用一块芹菜来做.
一旦你学会了如何安全地使用电锯,你将永远不会回去.那些继续兜售反RE宣传的人永远不会像那些学会爱他们的人那样富有成效.
所以是的,你应该知道如何使用RE,即使你只理解基本结构.它们就像其他任何工具一样.
有些任务中正则表达式是最好的工具.
有些任务正则表达式毫无意义.
有些任务是合理合适的,但不同的方法可能更具可读性.
一般来说,我想在涉及实际模式时使用正则表达式.如果你只是在寻找一个特定的字符串,我通常不会使用正则表达式.作为灰色区域的一个例子,有人曾经在新闻组上询问检查一个字符串是否包含任何其他字符串的最佳方法.出现的两种方式是:
使用替代方案构建正则表达式并执行单个匹配.
依次测试每个字符串string.Contains
.
我个人认为后一种方式更简单 - 它不需要考虑转义你正在寻找的字符串,或任何其他正则表达式的知识(以及它们在不同平台上的不同风格).
作为某个地方的例子,正则表达式显然是错误的选择,有人认真地建议使用正则表达式来测试字符串是否长三个字符.他们的正则表达式甚至没有起作用,尽管他们声称他们首先想到正则表达式的原因是因为他们已经使用它们这么久了,并且它们在正则表达式中自然有点"思考".
然而,有很多例子,正则表达式确实让生活更轻松 - 正如我所说,当你真正匹配模式时:"我想要一个字母,然后三个数字,然后是另一个字母"或者其他什么.我不觉得自己使用正则表达式非常频繁,但是当我做使用它们,他们节省了大量的工作.
简而言之,我相信知道正则表达式会很好 - 但同样要注意何时使用它们.很容易得到只写代码,通过简单的字符串操作重写可以使其更容易理解,即使结果代码稍长.
编辑:回应编辑问题...
我不认为对他们进行福音派是一个好主意 - 根据我的经验,这往往会导致他们使用它们,而另一种选择会更简单,这只会让你看起来很糟糕.另一方面,如果您遇到编写复杂代码以避免使用正则表达式的人,可以指出正则表达式会使代码更简单.
就个人而言,我喜欢以非常详细的方式评论我的正则表达式,将它们分成几行,每行之间有注释.这样他们就更容易维护,看起来你只是想成为"硬核"怪人(这可能是一种印象,即使它不是真正的预期目标).
我认为最重要的是要记住那短!=可读.从来没有声称使用正则表达式更好,因为它需要更少的代码 - 声称它更好,当它真正更简单和更容易理解(或当然有显着的性能优势).
作为开发人员,您应该了解尽可能多的工具的优缺点,这些工具可以为您的问题提供预先制定的解决方案.每个开发人员都应该知道如何使用正则表达式,并且感觉应该何时使用它们以及何时使用简单的字符串函数来实现目标.
在我看来,完全拒绝它们是因为它们难以阅读.一个认为如此的开发人员剥夺了他自己搜索和验证复杂字符串模式的宝贵工具.