正则表达式(Regular Expression)这个东西,之所以感觉难学,是因为几乎所有关于它的教程都很不友好,不是对初学者不友好,是对所有人不友好 —— 也许是因为绝大多数人即便是掌握了这个东西,也觉得实在它没办法对初学者友好罢。
瞬间提高自学能力的诀窍在于两个字:
别怕。
如果非要用四个字的话,就是:
啥都别怕。
不就是学个东西嘛,学不会也不会死人的,学得会是早晚的事情。
正则表达式,其实你之前已经用过,虽然当时你可能完全不明白自己再做什么。
通俗点讲,
正则表达式是用来 匹配 、 捕获 特定字符串的工具;之后,我们还可以对匹配到、捕获到的对象进行处理,比如 替换 。
OK,就这样了罢。这里请注意三个概念:
这两个概念掌握了,可以开始运用了,就算是入门了。入门之后就好办了,边用边学,边犯错边改进,最终达到精通的地步 —— 无论学什么不都是这样吗?
想象一下,我们有这么一串电话号码:
07700 900166
07700 900202
07700 900911
07700 900284
07700 900847
07700 900009
07700 900754
07700 900396
07700 900248
07700 900408
07700 900724
07700 900773
现在我们想把它们变成这样的格式显示:
(077)0090-0166
(077)0090-0202
(077)0090-0911
(077)0090-0284
(077)0090-0847
(077)0090-0009
(077)0090-0754
(077)0090-0396
(077)0090-0248
(077)0090-0408
(077)0090-0724
(077)0090-0773
那我们要怎么做才行呢?显然,手动一行一行地弄很麻烦啊!每行都要添加括号,删除空格,在加上减号作为四位分隔符……
在支持正则表达式的编辑器里(Atom 这方面真的很差,Sublimetext 真的强太多了),搜索 (/d/d/d)(/d/d) (/d/d)(/d/d/d/d)
,替换为 ($1)$2$3-$4
…… 好神奇,一下子就搞定了!
仔细看看每一个字符: /d
指的的任意数字,所以,07700 900773,其实就可以用 /d/d/d/d/d /d/d/d/d/d/d
搜索到(空格前面五位数字,空格后面六位数字)。
现在我们想要让它被替换为 (077)0090-0773
这样的格式…… 那么:
所以,我们在搜索的时候加上了括号 ()
—— 括号就是用来捕获的……
(/d/d/d)(/d/d) (/d/d)(/d/d/d/d)
翻译成自然语言:
/d/d/d/d/d /d/d/d/d/d/d
匹配 这些电话号码,以便我们能在文档中搜索到所有能够匹配这个正则表达式的字符串; (/d/d/d)(/d/d) (/d/d)(/d/d/d/d)
; ($1)$2$3-$4
…… 差不多了,这就是“入门”,后面你要接着研究:
而后你就反应过来了,上面用的正则表达式,实在是太愚蠢了!那你就想办法用更聪明的呗…… 谁也拦不住你。
还是那句话:反复使用,反复试错,没多久你就真的精通了。
至于深入一步的教程么,Google 喽……