我是编程新手,在一次采访中我遇到了一个关于正则表达式的问题;不用说我无法回答。所以我想知道我是否应该学习正则表达式?所有领域的每个程序员都必须这样做吗?还是对某些特定领域进行编程是必须的?
相关问题:
我是编程新手,在一次采访中我遇到了一个关于正则表达式的问题;不用说我无法回答。所以我想知道我是否应该学习正则表达式?所有领域的每个程序员都必须这样做吗?还是对某些特定领域进行编程是必须的?
相关问题:
Answers:
正则表达式是一种非常方便的工具,可用于多种语言,大多数开发人员迟早都会学习它们。
对于面试官来说,这是在面试中探寻经验的好方法。如果您正在面试一些声称拥有多年经验的人,而他们却不理解他们,则需要进一步挖掘。
正则表达式是一种工具。它恰好是一个非常有用的工具,因此许多人选择学习如何使用它。但是,除了学习其他内容的“需求”之外,您没有“要求”来学习如何使用此特定工具。
if (!(foo && bar))
=> if (!foo || !bar)
。也许您一直在使用它,而没有意识到,或者您没有学会正确的材料。
如果例如游戏程序员或LHC的程序员从未学习过正则表达式,我不会感到惊讶。我什至可以给游戏程序员提供不了解SQL的权限。
但是,如果您在任何类型的信息系统中工作,并且不知道正则表达式,那么对您自己是有害的。
另一方面,我不希望您的标准IS程序员了解游戏程序员所熟悉的矩阵数学。程序员有不同的学科,但是我们必须属于“信息系统”范畴。
正则表达式是表达如何匹配文本模式的一种非常简洁的方法。
在编程中经常会提出从文本中解析和提取数据或验证某些文本是否符合特定模式的要求,所以我想说是的,了解并理解它们很重要。
它们是您工具箱中的好工具,我希望任何有经验的程序员都知道如何使用它们。
Jeffery Friedl的书“ 掌握正则表达式”是了解正则表达式的最佳资源之一。它相当高级,因此您可能需要在有更多经验后才真正阅读它。
你可以用开始教程在regular-expressions.info。
与这里的大多数答案相反,我认为对正则表达式的了解不是成为一名高效程序员所必需的技能。当我面试应聘者的职位时,如果他们感到被迫提高自己的注册技能,我会更深入地挖掘自己。为什么?它们之所以经常在某些地方使用是因为它们喜欢正确的锤子,但是通常您需要的是螺丝刀。在SO中搜索HTML和正则表达式,您会看到很多问题以及正则表达式不合适的许多原因。
在我主张雇用正则表达式的知识之前,我当然不要求必须具备适当的OOD能力。而且我实际上不认为有人相信您可以成为了解正则表达式的生产力更高的程序员,但是缺乏诸如分析,设计和所用框架知识之类的领域
当然,有时候它们很方便,但是在我作为专业开发人员20多年的时间里,我认为我在代码中使用它们的次数不到20次(甚至我已经编写了一些perl脚本),我确实经常使用它们进行搜索和虽然取代。
无论您从事哪个领域的工作,正则表达式都是一个有用的工具,因为大多数编程语言都是纯文本编写的。因此,正则表达式是一种处理和重构源代码的好方法,它内置于许多文本编辑器中。我已经看到无数的程序员在使用正则表达式进行更改时可以对源文件进行重复更改,从而使更改更快,更准确。
这就是实用程序员的第3章谈论的内容,纯文本是“编程的基本原料”。
杰夫·阿特伍德(Jeff Atwood)写了一个很棒的关于正则表达式的博客,其中引述了一个惊人的说法:
Some people, when confronted with a problem, think "I know, I'll use regular
expressions." Now they have two problems. [Jamie Zawinski]
对于一个好问题,您可能想检查一下堆栈溢出也有一个很好的答案。
您应该对此有所了解。正则表达式易于学习,但难以掌握。您无需学习任何有关它的内容就可以开始使用它。明智一点。
tl; dr
您需要了解该技术,以便可以正确决定何时使用它。
引用另一个答案:
正则表达式是表达如何匹配文本模式的一种非常简洁的方法。
因此,如果这是您工作的重要部分,那么可能会有更好的方法来设计您正在开发的系统。除非大量文本是您所在地区的特定领域(例如生物信息学)。
我曾在三种不同的企业系统上工作(十年来曾在三家不同的公司使用),而我编写它们的时间还不到五次,其中包括将基本电子邮件验证程序复制和粘贴两次。
成为一个优秀的程序员,您不需要完全了解所有小的regex怪癖,特别是因为它们在不同的实现和编程语言周围往往会有所不同。什么,你就需要知道的是
无论如何,您甚至不必担心最初需要学习太多的精力。最简单的操作符(.
,*
,|
,()
,等)几乎普遍存在并走长路!
如前所述,Regex是一个工具,非常有用的工具恕我直言。
考虑以下示例:
//fomat number using string.replace and regex in javascript
function numberWithCommas(x) {
return x.toString().replace(/\B(?=(?:\d{3})+(?!\d))/g, ",");
}
只需一行即可将例如1000000.00这样的数字转换为“ 1,000,000.00”
使用任何其他方法将更加复杂
我真的建议您学习正则表达式。在工作中,当我们招聘程序员时,不知道正则表达式的应聘者通常会很快被辞退。不是因为他们绝对需要知道正则表达式,而是因为它很好地表明了他们对编程的理解程度以及编程成瘾的程度。
真正的程序员知道他们的正则表达式
但是,这有点偏颇,因为我主要参与Web编程,因此在服务器端和客户端,正则表达式肯定会遇到很多问题。如果您是洗碗机内置系统的汇编程序员,则可能根本不会遇到正则表达式。但是它仍然可能会派上用场,因为在大多数情况下,只要您知道正则表达式(搜索和替换,搜索文件,搜索多个文件等),您就可以利用开发环境。
此外,如果您确实知道,您会发现更容易被其他程序员认可。
嗯,我需要用逗号分隔并输出此字符串列表,让我编写一个包含带分隔符参数的for循环的函数,然后将它们附加在一起……或者我可以只使用现有的“ join”命令。
我需要根据每个对象具有的几个属性对这些复杂的对象进行排序,让我提醒自己如何编写一个可以执行此操作的排序函数,哦,不用等待,我可以使用该语言支持的现有标准排序函数。我将必须学习如何编写自定义比较器,但这应该不会太困难,它显然比维护我自己的排序函数要好。
我对虚拟方法的想法感到有些害怕,但是它应该可以帮助我减少这些列表,每个列表用于不同类型的项目,直到单个列表。然后,我不必编写六个类似的语句以不同的方式处理每个列表。猜猜我应该努力学习并学习这些东西,因为如果这样做的话,我的代码将变得更加简单和简洁。
我需要从此文本文件中提取所有其他杂音中的这些成对的单词和值,让我写一个五十行的解析器来逐个读取字符,如果其中一个字符看起来像是我的开头寻找我将设置此状态变量并开始以不同的方式解析它,依此类推等等……当然,我的情况显然如此特殊,没有其他人之前遇到过这样的问题,并发明了一种通用解决方案,占用一行的代码来做到这一点。那使我想起了我应该把那些我从未读过的编程书籍带到二手书店。
正则表达式是非常有用的工具,并且在很多情况下程序员应该使用它们。您不应该全心全意地学习使用它们。只需使用参考并完成您的任务即可。在使用了正则表达式的10-20-50-100(具体取决于程序员)任务完成之后,您将完全了解它们。它们是自己学习的,您不应该专门学习它们。
我已经看到了许多答案,但是它们似乎都是关于将正则表达式作为程序员工具箱中的一种工具的优点的。
我更喜欢将正则表达式视为一种知识,可以扩展人们对计算机工作原理的理解。一旦某人真正了解了常规语言,并且您可以通过三个简单的操作来表达它,我相信它为他们提供的不仅仅是简单的验证简单字符串的工具。
他们可以更好地理解一般的解析,这对每种编程都非常有用,并且可以更好地了解我们定期使用的工具(编译器,编辑器,浏览器等)如何工作。
使用正则表达式的实际好处当然是巨大的。即使您不对它们进行“编程”,我也一直使用正则表达式在编辑器中进行查找/替换,并衡量它们使我的工作效率更高。
因此,尽管没有必要,但我认为它是程序员应学习的首批工具之一。
正则表达式很难编写,很难编写,并且相对于其他技术而言可能很昂贵。标准的词法处理和解析技术非常易于编写,通用且适应性强,因此无需使用正则表达式。
另一种看待它的方式是词法分析器和解析器匹配静态定义的模式,但是正则表达式的优势在于它们提供了一种动态表达模式的方法。它们在文本编辑器和搜索工具中非常有用,但是当您在编译时知道要查找的所有内容时,正则表达式带来的通用性和灵活性远远超出了您的需要。
鼓励将正则表达式作为解决所有文本处理问题的灵丹妙药,这不仅是懒惰和糟糕的工程,而且还加强了本来根本不应该使用它们的人们的使用。
值得注意的是,Pike承认他们拥有自己的位置,当然,恕我直言,正则表达式是一种非常强大的工具,绝对值得我花时间学习使用,从这个角度来看,我绝对建议学习他们。但是,真正的问题可能是它们是一个创可贴,这让我对应有的词法分析和语法了解不足。:)