正则expression式是编程必须的吗?

正则expression式是编程必须的吗?

一个人可以轻易离开他们,但应该(恕我直言)知道的基本知识,原因有两个。
1)RegEx可能是目前问题的最佳解决scheme(见下图)
2)当你在别人的代码中看到一个正则expression式时,它不应该是100%神秘的。

preg_match('/summarycount">.*?([,\d]+)<\/div>.*?Reputation/s', $page, $rep); 

这段代码很简单,但是如果你不知道RegEx,那么第一个参数中的东西也可能是火星文。 这里使用的正则expression式实际上很简单,一旦你学习了基础知识,并让你远远地去到http://www.regular-expressions.info/他们有很多关于正则expression式的信息和它对不同平台/语言,他们也有一个很好的教程开始。; 之后检查出RegexBuddy ,它可以帮助你build立RegExs,当你build立它们,如果你看它做什么,那么它可以帮助你倾斜,这是迄今为止我所花费的最好的39.95美元。


原创漫画

是。 你可以在没有它们的情况下进行pipe理,但是至less大部分的计算任务都可以使用它们,所以你至less应该学习基础知识。 从长远来看,你将会省下很多痛苦和麻烦。 一旦你完成了最初的“跆拳道”阶段,正则expression式比你想象的要容易得多。

我会说不,他们不是必须的。 你可以成为一个完美的程序员而不知道他们。

我发现我使用正则expression式主要是为了一次性的数据操作任务,而不是实际的input应用程序代码。 他们可以方便地validationinput数据,但是现在你的控件经常为你做。

一点也不。 任何你可以用正则expression式做的事情完全可以在没有它们的情况下完成。

然而,这是一个强大的模式匹配系统,所以一些简单的正则expression式很容易完成的事情需要很多代码才能完成。

例如,这个:

 s = Regex.Replace(s, "[bcdfghjklmnpqrstvwxz]", "$1o$1"); 

不需要正则expression式就需要更多的代码:

 StringBuilder b = new StringBuilder(); foreach (char c in s) { if ("bcdfghjklmnpqrstvwxz".IndexOf(c) != -1) { b.Append(c).Append('o').Append(c); } else { b.Append(c); } } s = b.ToString(); 

或者,如果你不像程序员那样有经验,那么你可以轻松地创build更多的代码,并且执行非常糟糕的事情:

 string temp = ""; for (int i = 0; i < s.Length; i++ ) { if ( s[i] == 'b' || s[i] == 'c' || s[i] == 'd' || s[i] == 'f' || s[i] == 'g' || s[i] == 'h' || s[i] == 'j' || s[i] == 'k' || s[i] == 'l' || s[i] == 'm' || s[i] == 'n' || s[i] == 'p' || s[i] == 'q' || s[i] == 'r' || s[i] == 's' || s[i] == 't' || s[i] == 'v' || s[i] == 'w' || s[i] == 'x' || s[i] == 'z' ) { temp += s.Substring(i, 1); temp += "o"; temp += s.Substring(i, 1); } else { temp += s.Substring(i, 1); } } s = temp; 

让我这样说,如果你的工具包中有正则expression式,那么你将节省大量的时间和精力。 如果你没有他们,你不会知道你错过了什么,所以你仍然会很高兴。

作为一个Web开发人员,我经常使用它们(inputvalidation,从网站提取数据等)。

编辑:我意识到这可能会帮助你看看一些常见的问题,正则expression式用于通过查看正则expression式标签在这里在stackoverflow。

我会说是的。

它们如此普遍有用,因此完全没有能力至less读写简单的东西是一个相当重要的障碍。

支持正则expression式的语言

  • Java的
  • perl的
  • python
  • PHP。
  • C#
  • Visual Basic.NET
  • ASP
  • 电源shell
  • JavaScript的
  • ruby
  • TCL
  • VBScript中
  • VB6
  • XQuery的
  • XPath的
  • 的XSD
  • MySQL的
  • 神谕
  • PostgreSQL的

支持正则expression式的IDE和编辑器

  • 的IntelliJ
  • Netbeans的
  • 凝胶
  • 视觉工作室
  • 用UltraEdit
  • JEDIT
  • n编辑
  • 记事本+ +
  • Editpad Pro
  • emacs的
  • HAPEdit
  • PSPad

而且我们不要忘记grepsed

作为一个你更愿意拥有的雇主,一个好的程序员,偶尔需要在数千个源文件中手动查找/replace一些类似的string,并且需要数小时或数天的时间来完成,或者是一个好的程序员那么 – 偶尔会花费五,甚至十分钟制作一个正则expression式来完成同样的事情,而这些事情在他们去喝点咖啡的时候是不一样的。

真实世界的实际用法在这个答案

实际上,我用这个正则expression式来制作这个post。 我最初以逗号分隔的散文列出了支持它的语言。 然后我重新思考,并通过searchexpression式(\w+),将格式更改为项目符号列表(\w+),并在JEdit中将其replace为\n* $1 。 而且,随着他们获得的经验越来越多,使用它们将越来越成本效益越来越短的行动。

不可以。您可以编程多年,而不触及正则expression式。 当然,这意味着在某些知道RE的人会使用它们的情况下,你会做别的事情。 总是有不止一种方法来解决某个特定的问题,而正则expression式只是expression模式的一种方式(一种非常有效的,也许因此是受欢迎的方式)。

如果你关心开发一个软件工程师的职业,那么是的。 我雇佣了软件工程师,如果他们不知道使用正则expression式的基本知识,或者从来没有听说过这些,那么我想知道他们在整个编程技术中有多less实际经验。 他们还有什么不知道的?

上面的大多数评论都说“不,你可以通过其他方式解决问题”,他们也大多数人说,替代scheme是更多的代码,需要更长的时间来写…现在想可维护性和这个定制的代码是多么容易改变。使用正则expression式 – 那么它只是一行代码。

至less知道正则expression式的存在以及它们的用途是绝对必须的。 否则,在许多情况下,您将有重新发明车轮的危险。 如果你知道他们的存在,你可以进入细节,一旦你必须应用它们。 顺便说一下,正则expression式背后的理论是相当有趣的:-)

杰弗里·弗里德尔(Jeffrey Friedl)写了一本名为Mastering Regular Expressions的书 。 它给了我深刻的见解,也是一种真正的阅读乐趣。

即使我不经常使用正则expression式,他们最近派上用场:

  • input :一些松散格式的CSV字典文件,多种翻译,语录等

  • 输出 :很好的JSON。

  • 首先想到 :写一个简短的语法来parsing所有可能的字段和值。

  • 第一次尝试 :写了一个语法,但有一些粗糙的边缘,主要是特殊情况,只发生在0-1%的数据。 制作一个捕捉所有人的语法本来就太devise了。
  • 第二次尝试 :我用一个简单的语法捕捉主要字段,然后将其余的传递给一个例程,该例程应用了一些正则expression式。 它的速度很快,概念上也比写完整的文法和乐趣要容易得多。

  • 总结 :正则expression式节省了我几个小时的时间,实际上帮助我看到数据中的特殊情况以及它们出现的方式和位置。

他们值得学习吗? 是。

必须的? 不,但我几乎不认识那些不熟悉他们的人。

难以学习? 一点也不。

总之,没有。

但是他们当然可以成为正确工作的正确工具,并且对于那些最适合他们的string匹配操作是值得学习的。 但是,正因为你有一个好的大锤,这并不意味着你应该用它来破解每一个坚果。

不,我自己的正则expression式很糟糕,而且我还是一个糟糕的程序员。 等待。 什么?

更严重的说法是:我不懂正则expression式,但很less需要它们。 如果我真的需要一个,例如当我需要像Dave提到的那样validation用户input时,我问一个同事。

作为一名程序员,有很多东西是非常有价值的,但是我敢说,正则expression式远不在列表的顶部。

其实我觉得这是必须的

例如,我正在研究为什么我们的YouTubevideo的一部分无法正常工作……原来那些video的链接是

http://ca.youtube.com/v/raINk2Ii1A4 (不是真正的URL,只是一个例子)

代替

http://www.youtube.com/v/raINk2Ii1A4

另一位程序员之前使用“substr()”来提取YouTubevideoID,由于ca.youtube.com部分,提取的ID是错误的。

所以对我来说,正则expression式是非常重要的,没有这些,隐藏的bug可以比平时更频繁地引入。

但我之前遇到过3位开发人员,其中一位是一位非常优秀的networking应用程序开发人员,一位是着名的硅谷顶尖大学的理学硕士 ,一位是高级硕士gradle生,事实certificate他们都没有,知道正则expression式。 这对我来说有点令人惊讶。

那么,在计算机科学理论领域,它是非常强大和有用的“设备”,因为使用它你可以定义规则的语言并识别NFA甚至DFA,因此certificate了计算理论或有限自动化和forms语言领域的一些困难的定理。 在实际的编程中也是非常有用的,因为使用它你可以用相对容易的方式执行一个复杂的string操作。

可能不会。 但他们很容易学习 。 至less基础(所有的正则expression式引擎的东西)很快就教了。 我在30分钟内从另一个人的聊天窗口中学到了…

我想这不是必须的,但他们会减轻你的生活,为你节省很多时间。

如果你不知道如何使用正则expression式,你不知道你错过了什么。 但只要看一个人用他们来完成一项任务,就会觉得这是你应该具备的技能。

不…是的,

这很像其中之一,“我应该学习C”的问题。 没有正则expression式不一定是做某事的唯一方法。 但是它们往往是一个有用的抽象,它简化了代码,并且可以(我真的认为)甚至使它更具可读性。 也许是因为我喜欢杰夫弗里德尔的掌握正则expression式,或者因为我在perl工作分配。 但不pipe什么原因,正则expression式是我的工具。 现在看来,使用正则expression式,然后大多数其他string操作技术似乎更容易。

至less在最低层面理解正则expression式能够做什么是非常重要的。 如果你了解背后的概念和NFA,那么你会更好地理解其他问题。

至于开始正则expression式,我会说没有必要,但真正有价值。 事实上,每一个正则expression式引擎是不同的,所以即使你已经掌握了一个,你可能无法在其他地方快速做到这一点。

正则expression式至less要学会如果不使用正确的expression。

首先,你必须能够阅读和理解他人的正则expression式代码。

其次,基本正则expression式对应于有限自动机(由Kleene定理),这对于algorithmdevise来说是非​​常重要的。

实际上,女孩子有一条裙子裙子裙子

http://store.xkcd.com/xkcd/#RegexCheatSkirt

如果你碰巧是一个女孩,这可能是一个很好的学习机会。

不,你总是有其他两个select适合的要求。

  1. 问一个知道正则expression式的朋友。

  2. 在SO上发布问题。

根据你的领域,有一些问题可以使用正则expression式 – 或者反过来说:解决scheme/不使用正则expression式是非常笨拙的。 电子邮件validation/urlvalidation/最低密码强度/dateparsing浮现在脑海。

一定不是。 虽然有人认为一个好的程序员应该知道,但我不会这么说。 当时间到了,你会需要它,你会使用它。 无论如何,给它六个月不使用它,你不会记得任何表情的select。

就像编程中的所有事情一样,你会学习,忘记它,重新学习它。

没有。

取决于你想达到什么,正则expression式可以是有用的。 但是我会冒险的,80%或更多的程序员从不使用正则expression式,有些15%左右偶尔(并且必须Google),其余的只有一小部分实际上是正则expression式Ninjas。

我发现Regexr对于我使用正则expression式的罕见场合非常有用。

另外,有人会在下一分钟内提到jwz的某个引用。

正则expression式是一种强大的模式匹配语言。 并不限于文本string。 但是,一如既往,你的代码,你的电话。

简单地说,不。 这一切都取决于你的程序是如何实现的。

当然,了解RegExp是什么以及对它们如何工作的基本了解可能对未来有用。

我同意其他人的观点,认为这可能不是必须的,但至less有一个基本的理解是非常有帮助的。 我有一个RegEx备忘单张贴在我的立方体,我觉得非常有帮助。 http://regexlib.com/CheatSheet.aspx

了解正则expression式不是必须的。 但是,它是处理文本的有效工具。 如果你在处理文本的项目上工作,你最终会碰到它们。

正则expression式带来了各种各样的挑战,无论是使用它们,还是仅仅支持拥有它们的代码。 请注意,有各种语法风格。 不同的库和语言通常有稍微不同的语法规则。 正则expression式,因为它们变得更复杂,可以很容易地从一个简单的模式匹配工具转换到一块魔法,只写代码是不容易理解的。 而且,像大多数文本处理工具一样,它们往往难以排除故障或改变(例如,你有一个不适合工具特性的angular落案例)。

和所有的parsing代码一样,我推荐大量的unit testing。 特别注意边缘条件,重复的文本模式和不寻常的input。

绝对不是,我(就像很多人)已经编程好几年了,没有碰到它们。 也就是说,一旦你认识了他们,你就会开始看到他们在过去可能有用的地方:-)

我会说 – 只是读了基础知识,所以你知道什么RegExes是什么,你可以用他们做什么,那么如果你发现他们可能是有用的,你可以抓住一个教程/参考网站http://www.regular -expressions.info/并跳入。

如果你正在开发一种新产品,我build议你避免使用它们,或者最好谨慎地使用它们。

如果你正在维护一个已经使用正则expression式的产品,那么你别无select。

它有助于至less能够识别一个正则expression式,所以如果你遇到一个特别混淆的代码片段,你知道正确的search术语来find一个参考卡。

比如说,知道HTML或者能够使用关系数据库就不是。 严格地说,不,他们不是做编程的必要条件—他们在某些工作中可能是必不可less的,根本性的,但在其他方面却是不相干的。 在为新的以太网芯片编写设备驱动程序时,您不太可能使用正则expression式(或HTML或SQL)。 在我的领域中,我偶尔会在生产代码中使用正则expression式,在特殊脚本中更常使用按摩报告等。我曾经在一个项目中工作过,他们是一个中心特征(一个应用程序来分析自由forms的文本以寻找某些关键短语来产生编译的规则集)。