我学习正则表达式 大概用了 一个下午,准备让你们 两个小时学会。
如果 是计算机毕业的 学过正则文法,机器语言的。并且上课好好听的作业没有抄袭别人的。学习正则基础篇的 估计用不了两个小时。耐心的写几个。 估计就没啥问题了。
这次 直说 基础学习。不说 什么概念。基础学会了 感觉有意思了 在看看《精通正则表达式(第三版)》.(美) 网上有pdf的。或者自己百度百度 谷歌谷歌。深入的学习。不说了开始吧。 == 主要针对零基础的。有基础的就算了。
[0-9] 是个区间 就跟 高三数学里面的 区间[0-9] 一样 只是 他表示的都是 Z* 正整数 (我学完 JS 正则 之后 就感觉 万事万物都是想通的);
* 是个元字符 零个或者多个 就是 用数学的 就是 0到正无穷多个
+ 是个元字符 一个或者多个 数学里面是 1到正无穷
.是个元字符 代表任意东西
[] 里面 可以是枚举 比如 我只需要 124 就可以这样写 [124] 如果你是连续的 比如 12345678 可以写为 [1-8]; - 表示 是个区间 这个就是个军火库 你想要什么 里面你就放什么
[^] 取反 就像 二进制的 ^1 一样 取非
{} 是个区间符号 正则里面的区间 {1,3} 表示 数学的区间就是 [1,3]; 都是闭区间,{x,} 表示 x到正无穷 包含X X 代表正整数,{10} 就是代表 一定要有10个;
现在写一个 1234567890 的 正则表达式 条件 就是 一个 10位的 正整数 可以这样写 [0-9]{10}; 数字的位数 不确定 可能一个数字都没有 [0-9]*,至少 只有一个 [0-9]+ 或者 [0-9]{1,};
格式化一个时间吧 比如 现在比较流行的 时间 格式 2015.2.2 现在 你必须格式化成 这样样子 没有学正则之前 你肯定想的 用 DateFormat 去格式化 直接 yyyy.M.d 这样子 但是 你这样字格式化如果 是 2015.12.12 就会格式化 成 2015.2.2 ,明显 是不对的 。其实 换个思考 你也替换下 你先应该可以写出来的是 用 testStr.replaceAll(".0", "");
这样 你会发现 会有问题 因为 .可以 跟任何的字符匹配 这个时候 你需要转义 \\. 就会转移成 真正的. 转义的知识 跟所有的程序中转义都是一样的。
应该写成 testStr.replaceAll("\\.0", ""); 就OK了 。
以上就是规则 跟。基础的 并没有讲? 涉及到问号 之后 就会有 懒惰模式 跟贪婪模式 只别 先把基础的看会吧 再去看这个吧。
留几个作业吧, 这东西 要多用 我是看了一个下午 但是 我给自己布置作业写了两天。 开发中碰见的问题 尽量自己用正则解决 一个月就差不多了。
字符串 2015-12-10 09:33:00.0 只保留年月日 使用正则。 \\s(\\d{2}:){2}\\d{2}\\.\\d$ 这个是答案 但是你看不懂。 这些 你要是都没有学会 就不要查 这个正则是咋写出来的
还有一个就是匹配 IP 地址的 比如 192.168.1.1 自己想想 IP 地址的规则 写吧,正则 没有什么 简繁之称 自己能看懂,别人能看懂。能解决问题 就是好正则。 这不是我说的。《精通正则表达式(第三版)》的作者说的。
这些都写完之后 可以写写时间的 考虑 间隔符 年月日 - . 闰年 二月 30天的 31天的 用上面的知识都是可以完成的
感悟吧 写正则就是想 庖丁解牛 你要看到他的骨架 而不是真身。想想都是什么构成的 规则是什么 最多的可能出现的场景。 然后 一一去匹配他。自己学会之后 写正则会上瘾的。
还有就是 我不打算写进阶 高级篇 网上 已经很多 资料了 挺简单的。没时间的话 也不用看《精通正则表达式(第三版)》 这个书 我就是无意间看到了 就像一个酒鬼看见一个新酒 想上去喝两口 一样的道理。(语文从来没有及格过)