正则表达式
作者:互联网
正则表达式
JAVA版
单个符号
1、英文句点.
符号:匹配单个任意字符。
- 表达式
t.o
可以匹配:tno
,t#o
,teo
等等。不可以匹配:tnno
,to
,Tno
,t正o
等。
2、中括号[]
:只有方括号里面指定的字符才参与匹配,也只能匹配单个字符。
- 表达式:
t[abcd]n
只可以匹配:tan
,tbn
,tcn
,tdn
。不可以匹配:thn
,tabn
,tn
等。
3、|
符号。相当于“或”,可以匹配指定的字符,但是也只能选择其中一项进行匹配。
- 表达式:
t(a|b|c|dd)n
只可以匹配:tan
,tbn
,tcn
,tddn
。不可以匹配taan
,tn
,tabcn
等。
4、表示匹配次数的符号
符号 | 次数 |
---|---|
* |
零次或者多次, 克林闭包, * 等价于{0,} |
+ |
一次或者多次, 正闭包, + 等价于{1,} |
? |
零次或者一次, ? 等价于{0,1} |
{n} |
恰好n次 |
{n,m} |
从n次到m次 |
- 表达式:
[0—9]{3}\—[0-9]{2}\—[0-9]{3}
的匹配格式为:999-99-999
因为-
符号在正则表达式中有特殊的含义,它表示一个范围,所以在前面加转义字符\
。
5、^
符号:
- 限定开头:
- 匹配后面紧跟的字符为开头的字符(
[ ]
之外或数字、元字符之前),^[0-9]
,含义为以0-9
中的数字为第一个数字开头,[^x]
第一个字符不能是x
。
- 否 ( 取反 ) :
- 当这个字符出现在一个字符集合模式(
[ ]
之内)的第一个字符时,表示为取反。如[^0-9]
,表示为匹配除了数字以外的字符。
6、$
符号:
表示从字符串末尾进行匹配。
如/^[0-9]{8}$/
,表示为字符串以数字为结尾字符。
7、\S
符号:非空字符
8、\s
符号:空字符,只可以匹配一个空格、制表符、回车符、换页符,不可以匹配自己输入的多个空格。
9、\r
符号:空格符,与\n
、\tab
相同
()和[]有本质的区别
()内的内容表示的是一个子表达式,()本身不匹配任何东西,也不限制匹配任何东西,只是把括号内的内容作为同一个表达式来处理,例如(ab){1,3},就表示ab一起连续出现最少1次,最多3次。如果没有括号的话,ab{1,3},就表示a,后面紧跟的b出现最少1次,最多3次。[]表示匹配的字符在[]中,并且只能出现一次,并且特殊字符写在[]会被当成普通字符来匹配。例如[(a)],会匹配(、a、)、这三个字符。
常用的正则表达式
1、Java:
(([a-z]|_)(\\w*)){6,20}
匹配以字母或下划线开头,字母数字下划线结尾的字符串
2、JavaScript:
/^(\-?)(\d+)$/
匹配数字
3、JavaScript:
/^\w+$/
匹配字母数字下划线。
Java 中正则表达式的应用
1、判断功能
public boolean matches(String regex)
// 案例:判断录入的手机号是否为13或者18开头
public class RegexDm {
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
System.out.println("请输入手机好:");
String s = sc.nextLine();
String regex = "1[38]\\d{9}"; //定义手机好规则
boolean flag = s.matches(regex); //判断功能
System.out.println("flag:"+flag);
}
}
2、分割功能
public String[] split(String regex)
public class RegexDm {
public static void main(String[] args){
String age = "18-24"; //定义年龄范围
String regex = "-";
//分割成字符串数组
String[] strArr = age.split(regex);
int startAge = Integer.parseInt(strArr[0]);
int endAge = Integer.parseInt(strArr[1]);
Scanner sc = new Scanner(System.in);
System.out.println("请输入您的年龄:");
int a = sc.nextInt();
if (a >= startAge && a <= endAge){
System.out.println("你就是我想找的");
}else{
System.out.println("滚");
}
}
}
3、替换功能
public String replaceAll(String regex,String replacement)
public class RegexDm {
public static void main(String[] args){
String s = "12342jasfkgnas234";
//把字符串里面的数字替换成*
String regex = "\\d";
String ss = "*";
String result = s.replaceAll(regex,ss);
System.out.println(result);
}
}
字符符号
字符 | 作用 |
---|---|
. |
匹配任意一个字符 ( 除了\n ) |
[] |
匹配[] 中列举的字符 |
[^...] |
匹配不在[] 中列举的字符 |
\d |
匹配数字, 0到9, 等价于[0-9] |
\D |
匹配非数字 |
\s |
匹配空白, 就是空格和tab, 仅匹配一个空格、\t、\n、换页符 |
\S |
匹配非空白 |
\w |
匹配字母数字或下划线字符, [a-zA-Z0-9_] |
\W |
匹配非字母数字或下划线字符 |
- |
匹配范围, 比如[a-f] |
常用的正则表达式
一、校验数字的表达式
-
数字:
^[0-9]*$
-
n位的数字:
^\d{n}$
-
至少n位的数字:
^\d{n,}$
-
m-n位的数字:
^\d{m,n}$
-
零和非零开头的数字:
^(0|[1-9][0-9]*)$
阿拉伯数字 -
非零开头的最多带两位小数的数字:
^([1-9][0-9]*)+(.[0-9]{1,2})?$
-
带1-2位小数的正数或负数:
^(\-)?\d+(\.\d{1,2})?$
-
正数、负数、和小数:
^(\-|\+)?\d+(\.\d+)?$
-
有两位小数的正实数:
^[0-9]+(.[0-9]{2})?$
-
有1~3位小数的正实数:
^[0-9]+(.[0-9]{1,3})?$
-
非零的正整数:
^[1-9]\d*$
或^([1-9][0-9]*){1,3}$
或^\+?[1-9][0-9]*$
-
非零的负整数:
^\-[1-9][]0-9"*$
或^-[1-9]\d*$
-
非负整数:
^\d+$
或^[1-9]\d*|0$
-
非正整数:
^-[1-9]\d*|0$
或^((-\d+)|(0+))$
-
非负浮点数:
^\d+(\.\d+)?$
或^[1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0$
-
非正浮点数:
^((-\d+(\.\d+)?)|(0+(\.0+)?))$
或^(-([1-9]\d*\.\d*|0\.\d*[1-9]\d*))|0?\.0+|0$
-
正浮点数:
^[1-9]\d*\.\d*|0\.\d*[1-9]\d*$
或^(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*))$
-
负浮点数:
^-([1-9]\d*\.\d*|0\.\d*[1-9]\d*)$
或^(-(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*)))$
-
浮点数:
^(-?\d+)(\.\d+)?$
或^-?([1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0)$
二、校验字符的表达式
-
汉字:
^[\u4e00-\u9fa5]{0,}$
-
英文和数字:
^[A-Za-z0-9]+$
或^[A-Za-z0-9]{4,40}$
-
长度为3-20的所有字符:
^.{3,20}$
-
由26个英文字母组成的字符串:
^[A-Za-z]+$
-
由26个大写英文字母组成的字符串:
^[A-Z]+$
-
由26个小写英文字母组成的字符串:
^[a-z]+$
-
由数字和26个英文字母组成的字符串:
^[A-Za-z0-9]+$
-
由数字、26个英文字母或者下划线组成的字符串:
^\w+$
或^\w{3,20}$
-
中文、英文、数字包括下划线:
^[\u4E00-\u9FA5A-Za-z0-9_]+$
-
中文、英文、数字但不包括下划线等符号:
^[\u4E00-\u9FA5A-Za-z0-9]+$
或^[\u4E00-\u9FA5A-Za-z0-9]{2,20}$
-
可以输入含有
^%&',;=?$\"
等字符:[^%&',;=?$\x22]+ 12
禁止输入含有~
的字符:[^~\x22]+
其它:
.*
匹配除 \n
以外的任何字符。
/[\u4E00-\u9FA5]/
汉字
/[\uFF00-\uFFFF]/
全角符号
/[\u0000-\u00FF]/
半角符号
三、特殊需求表达式
-
Email地址:
^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$
-
域名:
[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(/.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+/.?
-
InternetURL:
[a-zA-z]+://[^\s]*
或^http://([\w-]+\.)+[\w-]+(/[\w-./?%&=]*)?$
-
密码:
^[a-zA-Z]\w{5,17}$
// 字母开头,长度在6~18之间,只能包含字母、数字和下划线
-
日期格式:
^\d{4}-\d{1,2}-\d{1,2}
-
一年的12个月(01~09和1~12):
^(0?[1-9]|1[0-2])$
-
一个月的31天(01~09和1~31):
^((0?[1-9])|((1|2)[0-9])|30|31)$
-
xml文件:
^([a-zA-Z]+-?)+[a-zA-Z0-9]+\\.[x|X][m|M][l|L]$
-
空白行的正则表达式:
\n\s*\r
(可以用来删除空白行) -
校验日期:
^(?:(?!0000)[0-9]{4}-(?:(?:0[1-9]|1[0-2])-(?:0[1-9]|1[0-9]|2[0-8])|(?:0[13-9]|1[0-2])-(?:29|30)|(?:0[13578]|1[02])-31)|(?:[0-9]{2}(?:0[48]|[2468][048]|[13579][26])|(?:0[48]|[2468][048]|[13579][26])00)-02-29)$
(“yyyy-mm-dd“ 格式的日期校验,已考虑平闰年。)
需要注意的点
元字符 | 描述 |
---|---|
x|y | 匹配x或y。例如,`z |
[xyz] | 字符集合。匹配所包含的任意一个字符。例如,[abc] 可以匹配“plain”中的“a”。 |
[^xyz] | 负值字符集合。匹配未包含的任意字符。例如,[^abc] 可以匹配“plain”中的“plin”任一字符。 |
[a-z] | 字符范围。匹配指定范围内的任意字符。例如,[a-z] 可以匹配“a”到“z”范围内的任意小写字母字符。注意:只有连字符在字符组内部时,并且出现在两个字符之间时,才能表示字符的范围; 如果出字符组的开头,则只能表示连字符本身。 |
[^a-z] | 负值字符范围。匹配任何不在指定范围内的任意字符。例如,[^a-z] 可以匹配任何不在“a”到“z”范围内的任意字符。 |
\b | 匹配一个单词的边界,也就是指单词和空格间的位置(即正则表达式的“匹配”有两种概念,一种是匹配字符,一种是匹配位置,这里的\b就是匹配位置的)。例如,“er\b”可以匹配“never”中的“er”,但不能匹配“verb”中的“er”;“\b1_”可以匹配“1_23”中的“1_”,但不能匹配“21_3”中的“1_”。 |
\B | 匹配非单词边界。“er\B”能匹配“verb”中的“er”,但不能匹配“never”中的“er”。 |
\cx | 匹配由x指明的控制字符。例如,\cM 匹配一个Control-M或回车符。x的值必须为A-Z或a-z之一。否则,将c视为一个原义的“c”字符。 |
\d | 匹配一个数字字符。等价于[0-9] 。grep 要加上-P,perl正则支持 |
\D | 匹配一个非数字字符。等价于[^0-9] 。grep要加上-P,perl正则支持 |
\f | 匹配一个换页符。等价于\x0c 和\cL 。 |
\n | 匹配一个换行符。等价于\x0a 和\cJ 。 |
\r | 匹配一个回车符。等价于\x0d 和\cM 。 |
\s | 匹配任何不可见字符,包括空格、制表符、换页符等等。等价于[ \f\n\r\t\v] 。 |
\S | 匹配任何可见字符。等价于[^ \f\n\r\t\v] 。 |
标签:字符,匹配,String,符号,正则表达式,zA,数字 来源: https://www.cnblogs.com/sc-hua/p/15943110.html