正则表达式
【/\{\{(.+?)\}\}/g】
最前面的“/”与最后面的“/”是分隔符,表示正则表达式的开始与结束。
最后的“g”标志表示正则表达式使用的global(全局)的状态。使用 global 标志表明在被查找的字符串中搜索操作将查找所有符合的项,而不仅仅是第一个。这也被称为全局匹配。【相关的标志还有i(ignoreCase,表示忽略大小写)、m(multiline,表示允许跨行)】
然后我们再来看中间的主体部分:\{\{(.+?)\}\}花括号{}是正则里的限定符。但是我们这里是要找字符串里的花括号,所以前面加个“\”来表示是要找字符的花括号。“\{\{”“\}\}”就是找前后两组花括号。
“.”表示任意字符。“+”表示前面表达式一次乃至多次。“?”表示匹配模式是非贪婪的。
/\{\{(.+?)\}\}/g完整的意思就是:在全部范围内查找匹配前后有两组花括号的字符串。
例如:“{{}}”、“{{asdfasdfasdf56745}}”、“{{yuyuy#$%8787 9+_)(*)87 }}”
【+?】
不加 ? 表示贪婪,一口吃掉整个字符串,然后从最后一个一个地吐出来直到匹配为止
加 ? 表示勉强,加 ?勉强是从左边一个一个地吃直到匹配为止。
字符串
a=====b=====b===
a.*b 将匹配满足条件最长的字符串 a=====b=====b
工作方式:
首先将:a=====b=====b=== 全部吃掉,从右边一个一个地吐出来
1. a=====b=====b=== 不匹配,吐出一字符
2. a=====b=====b== 不匹配,再吐出一字符
3. a=====b=====b= 不匹配,再吐出一字符
4. a=====b=====b 匹配了,结束。如果再不匹配继续吐,直到没有字符了,匹配失败
a.*? 将匹配满足条件最短的字符串 a=====b
工作方式:
从左边一个一个地吃掉字符
1. a 不能匹配表达式,继续吃
2. a= 不能匹配表达式,继续吃
3. a== 不能匹配表达式,继续吃
4. a=== 不能匹配表达式,继续吃
5. a==== 不能匹配表达式,继续吃
6. a===== 不能匹配表达式,继续吃
7. a=====b 呵呵,终于能匹配表达式了,匹配结束,匹配位置留于字符 b 后面,继续其他的匹配。如果不能匹配则一个一个地吃掉整个字符串直到吃完为止若还没有匹配则匹配失败。
【"\\w+([-+.']\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w)*"】
1 \w意思是单词字符:[a-zA-Z_0-9] 在java里都是\\w因为要转义 \\w+ 这个加号表示至少有一个
2 ([-+.']\\w+)* [-+.']表示括号里面选择一个 外面*号表示0个1个或多个
3 @ 原样匹配
4 \\.就匹配点,点在正则里面是元字符,元字符匹配要转移写成\.,java里写成\\.
这个正则匹配的是个邮箱 必须要要的就是: 单字符 @ 单字符 点 单字符
其他的字符可有可无 a@a.a 这个是匹配的 也是最少最低的要求了 因为+号 * 可以匹配的就很多了,比如 assas.eee@sse-fdd.32d