re正则表达式_持续学习中
程序员文章站
2022-07-10 08:21:40
...
re正则表达式
项目 | 价格 |
---|---|
. | 代表一个任意字符 |
^ | 以字符开头 例如:“^b”以b开头 “^a.*”以a开头后面又任意字符的一个字符串 |
$ | 以字符结尾 例如: “3”以a开头以3结尾 中间又任意多的字符的字符串 |
* | 代表前面的字符可以出现任意多遍 例如:“1*” 1可以出现任意多便 “.*”任意字符出现任意多遍 |
? | 逆贪婪模式 默认一直往右扫,扫到最后一个合适的才退出,例如:”booobb”->匹配“.(b.*b).”有 booob 和 bb 和 booobb 由于 bb 在最后匹配到,返回的是 “bb”,“.?(b.*b).”得到 booobb, 加上“?“,所以就是从左往右,因为后面的那个 匹配串中后面那个b还是贪婪匹配,所以会尽可能多的匹配多的字符,这个时候 加上 “.?(b.?b).“ , 返回的就是 ”booob“ Ps.”()**”会返回括号内的内容 |
+ | 代表出现至少一次 “*”可以一次都不出现 |
{2} | 限定前面字符出现的次数 ”.(b.{2}b).“ 代表bb之间有两个任意字符 |
{2,} | 限定前面字符出现的次数 至少为两次 |
{2,5} | 限定前面字符出现的次数 为2~5次 |
. | 代表一个任意字符 |
| | 或者关系 ”bobby | bobby123“代表匹配字符串为 bobby 或者 bobby123 |
[ ] | 中括号中的字符只要满足任意一个,就可以。“[abcd]ooby123”“[0-9]”代表0~9“[^1]”不等于1 进入“[]”的符号 就没有之前的意义了 既 “[ . ]”就是代表 点号 的意思 而不再是 任意字符 其他字符同理 |
\s | 代表空格、换行、tab缩进等所有的空白 “(你\s好)”->“(你 好)” |
\S | 代表 只要不是空格都可以 |
\w | 代表等价于[0-9 A-Z a-z ], 也就是A~Z 和 a~z 和 0~9 和 下划线“” 中间的任意一个 |
\W | 非\w所代表的字符 如 空格 [email protected]#$%^&*() 之类 |
[\u4E00-\u9FA5] | 代表一个汉字 这是个固定写法 不能更改 例如:“study in 三峡大学”提取出什么大学, ”.?([\u4R00-\u9FA5]+大学)“ 这里由于前面有其他字符 所以 前面要加上 “.” 又由于又贪婪匹配的原因 会自动取出最小的符合情况的 所以如果不加上”?” 就会取出 “峡大学”, 因此加上 “?” 逆贪婪匹配,取出三峡大学 |
\d | 代表的是数字的意思 例如:“xxx出生于1998年” -> “.(\d{4})年”或者”.?(\d+)年” |
\D | 代表非数字 |
前端使用input输入数据的时候,例如
<input type = "text" name = "username" pattern = "[a-zA-Z]{6,12}" required = "required" placeholder = "请输入6到12位字母">
public class test {
public static void main(String[] args){
String data = "a";
String regex = "\\D";
boolean flag = data.matches(regex);
System.out.println(flag);
}
}
通过这个在 servlet 中 判断用户输入是否合法
前端校验的局限性:
优点:
1. 能够对数据进行初步筛选,减少后台服务器的压力
2. 使用html5校验,比较简单易用
弊端:
1. 可以通过一些手段通过前端校验(例如,F12 删除html中的pattern代码,可以绕过)
因此,做数据校验,不能只在前端进行校验,在后台也要进行校验。
上一篇: Python使用struct处理二进制