无序,定期学习问题和答案

最近,我们有幸参与话题的问题和答案为正则表达式在开源中国与51cto客人。提问和回答的过程中,我在学习正则表达式的过程中收集的一些常见问题。

正则表达式是很难学的,毫无疑问,但我认为困难只是语法上的,正则表达式已经存在多年了,它诞生于上世纪70年代,那是什么样的场景举个简单的例子,Unix的使用、开发和其他的名字,然后传下来的,现在很多人批评USR,没有用户,没有装置,它是难学、难记,经过这些年的快速发展,许多相同的问题已经被包装的今天,用户可能更华丽,习惯,如用户目录直接点击驱动器图标,再也不用担心那些不规则的短名称。不幸的是,然而,正则表达式的语法并没有太大的改变,甚至后续的功能都沿袭以前的语法风格。如今,随着编程语言越来越人性化,这自然是很难理解的。今天的开发商可能更习惯于Regex.CharRange(一个Z)这种方式,没有{ A-Z }的习惯;遇到(!{到})这样的结构是更多的测试,除非转换为regex.checkright(regex.charrange(一个Z)写的)。

However, in a different way, the two are actually one thing, just different forms of expression, a similar key, a similar vernacular.If we can build the transformation from the key to the vernacular in the mind, the regular expression is much simpler, or even the splicing of the modules.For example, Alipay's serial number is 18 or 26 digits, with regular expressions, is $^ ({0-9}{18}|{0-9}{26}), or ^{0-9}{18} ({0-9}{8}).The logic is simple: ^ used to lock at the beginning, to the end of the lock, ${0-9}, digital character ({0-9}{18}|{0-9}{26}), said the two parallel options, namely the digital string length is 18 or 26 bits, and {0-9}{18} ({0-9}{8}) said at least 18 of the emergence of a string of numbers, there may be a 8 bit after this s特林数(所以总长度为26位),正则表达式的应用是如此的简单。

如果你认为它是正确的,学习正则表达式的问题,只有选择合适的方式。当我们学习编程语言,我们强调的是我们不会读书或写程序,甚至最好的办法是输入实例上运行一遍书,这样我们才能真正学会但在许多人眼里,正则表达式可能不被视为编程语言,所以学习是实现这一点,甚至复制一些现成的表情来自网络。因此,一个最常见的问题是是否有任何捷径学习。不幸的是,答案是否定的,因为复制别人的代码不能学会编程,复制现成的表达式,并且很容易地翻出几份文档,当然,它不会学会成为常规的。但是幸运的消息是,学习正则表达式并不需要太长时间。

在我的经验中,学习正则表达式,真正想做的是,了解常用的功能:字符组,多分支,模式匹配,看看周围,可以说,这些点的规律性问题,80%是可以解决的。但要明白这几点,你需要特殊的学习:什么是字符组的问题和如何使用它哪个分支解决了什么问题,哪一个是怎么用的这是需要花一些时间来研究和思考;这些都不了解,然后研究如何解决复杂问题的表现了。如果你能每天1-2小时的专项研究,将在两周内效果明显,近一个月可以做相当的水平。此外,根据我的经验,当学习新的编程语言,你不仅需要在书上输入的例子,而且修改示例代码看看想想为什么会发生什么,如果你这样做,在正则表达式中,你一定会收到事半功倍的效果。

如果你真正理解这些共同的功能,对它们的价值和用法有一个清晰的概念,就可以解决另一个问题。我们如何用不同的语言解决不同的正则表达式呢虽然正则表达式在不同语言中表达不同,但它们背后的思想是统一的。不同的仅仅是表达的形式,或登陆方式。好处是编程语言文件并未详细解释什么是字符组,什么是更多的分支机构,但会详细地告诉你在这组人物的语言是如何表达的,它是如何表达的分支(你可以在这些文件中的字符类或交替搜索)。所以,如果你的大脑是很清楚的,即使你不知道最终的书面表达,你只需要查找文件。例如,,字符集在java字符串空白字符,写作的,因为一个合法的转义序列不是在字符串java,所以还必须有逃跑;在PHP可以直接写 S,B因为PHP字符串不会转义序列识别原封不动地保存下来;Unix下的一些工具,必须写作:空间:} },这是POSIX规范符号Perl风格的它似乎更麻烦,而这一切,因为我们知道,我们需要用的是这里的比赛空白字符的字符组。

上面写了这么多,可能有人会说:正则表达式这东西,放不好是没有必要花太多的精力。也许正是这种观点,形成了对正则表达式的仔细研究缺失的根本原因。幸运的是,这个问题很好理解,因为很多东西都是真理。例如,写文章,我们不要求每个人都成为作家,但是每个人都会写一些严肃的文章时。并不是作家在需要的时候写不出严肃的文章,为了在需要的时候写出积极的文章,有必要抽出时间去学习和练习写作,正则表达式的学习实际上也是一样的。

这能说服一些人,但有些人不能说服他们。同时,在我看来,那些不能被说服,似乎没有花太多的精力在其他的事情,但往往被正则表达式。相反,一个真正的专业程序员,像生产程序,将花2小时写一个正则表达式,这将节省漫长的时间后。当然,这一切的前提是学习正则表达式的一个积极的态度,或者学习宝贵的技能。大多数人阅读软件读布鲁克斯的名字没有银弹

这篇文章是原创Yurii,转载请注明来源:混沌印记