当前位置:  开发笔记 > 编程语言 > 正文

正则表达式是否必须用于编程?

如何解决《正则表达式是否必须用于编程?》经验,为你挑选了7个好方法。

正则表达式是编程的必要条件吗?



1> UnkwnTech..:

一个人可以很容易地没有他们,但有一个人应该(恕我直言)知道基本知识,原因有两个.
1)RegEx可能是解决手头问题的最佳解决方案(见下图)
2)当你在别人的代码中看到正则表达式时,它不应该是100%神秘的.

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

这段代码很简单但是如果你不知道RegEx那么第一个参数中的东西也可能是火星语言.一旦你学习了基础知识,这里使用的RegEx实际上非常简单,并且为了让你远远超过http://www.regular-expressions.info/,他们有很多关于RegEx的信息及其对不同的各种意见平台/语言他们也有一个很好的入门教程.在看完RegexBuddy之后,它可以帮助你构建RegExs,当你构建它们时,如果你看它的功能那么它可以帮助你精益,它到目前为止是我用过的最好的39.95美元.



原创漫画


因为没有添加alt文本而试图downvote.
是的,漫画是强制性的.
"等等,忘了逃离太空.Weeeeeee [taptaptap] eeeeee."
将帖子中的图像归因于xkcd.com可能是个好主意
TBF,在Perl中,您只需使用现有模块并使用:p.有效的电子邮件地址正则表达式实际上是几页长.XKCD--因为没有把它弄好.

2> Chris Huang-..:

是.您可以在没有它们的情况下进行管理,但您至少应该学习基础知识,因为大多数计算任务都可以使用它们.从长远来看,你将节省很多痛苦和麻烦.一旦你克服了最初的'wtf'阶段,正则表达式比你想象的容易得多.


当我通过那个阶段时,"当你超越最初的'wtf'阶段时,RegEx成为第二天性,现在只有那些愚蠢的长(电子邮件)RegExs让人头脑麻木.

3> Dave Webb..:

我会说不,他们不是必须的.你可以在不了解它们的情况下成为一名优秀的程序员.

我发现我使用正则表达式主要用于数据操作的一次性任务,而不是实际放入应用程序代码.它们可以方便地验证输入数据,但是现在您的控件通常会为您执行此操作.


+1同意,我用正则表达式做的最有用的事情是在Visual Studio中相当复杂的搜索/替换操作,它们使我免于手工劳动.

4> Guffa..:

一点也不.如果没有它们,你可以用正则表达式完成任何事情.

但是,它是一个功能强大的模式匹配系统,因此使用简单的正则表达式模式很容易实现的一些事情需要很多代码才能完成.

例如,这个:

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

在没有正则表达式的情况下需要更多代码:

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();

或者如果你不是一个经验丰富的程序员,你可以轻松创建更多代码并执行非常糟糕的东西:

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;


显然,正则表达式总是可以用代码替换正则表达式,但上面的荒谬琐碎的例子并不是很远.任何相当复杂的正则表达式只会被替换为编写类似底层NFA的东西,这对于一个甚至不知道正则表达式的开发人员来说都不容易.很多时候,我见过没有基本解析理论的开发人员尝试编写简单的解析器和词法分析器.它从来都不漂亮,而且通常非常耗费时间.
我发现正则表达式可以使用其他代码替换,但它们通常变得很长并且难以维护.

5> aleemb..:

让我这样说吧,如果你的工具包中有正则表达式,你将节省大量的时间和精力.如果你没有它们,你就不会知道你错过了什么,所以你仍然会很开心.

作为Web开发人员,我经常使用它们(输入验证,从站点提取数据等).

编辑:我意识到通过在stackoverflow上查看正则表达式标记,可以帮助您查看正则表达式所使用的一些常见问题.



6> Trampas Kirk..:

我会说是的.

它们是如此普遍有用,完全没有能够至少读写简单的能力是一个非常重大的障碍.

支持正则表达式的语言

Java的

perl的

蟒蛇

PHP.

C#

Visual Basic.NET

ASP

电源外壳

JavaScript的

红宝石

TCL

VBScript中

VB6

XQuery的

XPath的

的XSD

MySQL的

神谕

PostgreSQL的

支持正则表达式的IDE和编辑器

日食

的IntelliJ

Netbeans的

凝胶

视觉工作室

用UltraEdit

JEDIT

n编辑

记事本+ +

Editpad Pro

emacs的

HAPEdit

PSPad

而且我们不要忘记grepsed!

作为一个雇主,你宁愿拥有,一个好的程序员 - 偶尔 - 将不得不手动查找/替换数千个源文件中的一些类似的字符串,并且需要数小时或数天来完成它,或者是一个好的程序员是 - 曾经在一段时间 - 花费五年甚至10分钟制定一个正则表达式来完成,在需要他们去喝杯咖啡的时间运行同样的事情?

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

事实上,我实际上使用正则表达式来制作这篇文章.我最初列出了以逗号分隔的散文支持它的语言.然后我重新思考它,并通过搜索表达式(\w+),并将其替换\n* $1为JEdit ,将格式更改为项目符号列表.随着您获得的体验越多,使用它们对于更短和更短的操作集将变得越来越具有成本效益.



7> unwind..:

不.你可以编程多年而不用触及正则表达式.当然,这意味着对于某些知道RE:s的人会使用它们的情况,你会做其他事情.解决特定问题的方法总是不止一种,而正则表达式只是表达模式的一种方式(一种非常有效,也许是流行的方式).

推荐阅读
linjiabin43
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有