(三)java正则--java正则表达式
记一些知识。。。。
以下摘自w3school..
"(.)\\1+" 括号中的点表示任意字符,后面的\\1表示取第一个括号匹配的内容,后面的加号表示匹配1次或1次以上。二者加在一起就是某个字符重复两次或两次以上
符号定义
基本书写符号
符号 |
符号 |
示例 |
解释 |
匹配输入 |
\ |
转义符 |
\* |
符号“*” |
* |
[ ] |
可接收的字符列表 |
[efgh] |
e、f、g、h中的任意1个字符 |
e、f、g、h |
[^] |
不接收的字符列表 |
[^abc] |
除a、b、c之外的任意1个字符,包括数字和特殊符号 |
m、q、5、* |
| |
匹配“|”之前或之后的表达式 |
ab|cd |
ab或者cd |
ab、cd |
( ) |
将子表达式分组 |
(abc) |
将字符串abc作为一组 |
abc |
- |
连字符 |
A-Z |
任意单个大写字母 |
大写字母 |
限定符
限定符将可选数量的数据添加到正则表达式,下表为常用限定符:
符号 |
含义 |
示例 |
示例 |
匹配输入 |
不匹配输入 |
* |
指定字符重复0次或n次 |
(abc)* |
仅包含任意个abc的字符串,等效于\w* |
abc、abcabcabc |
a、abca |
+ |
指定字符重复1次或n次 |
m+(abc)* |
以至少1个m开头,后接任意个abc的字符串 |
m、mabc、mabcabc |
ma、abc |
? |
指定字符重复0次或1次 |
m+abc? |
以至少1个m开头,后接ab或abc的字符串 |
mab、mabc、mmmab、mmabc |
ab、abc、mabcc |
{n} |
只能输入n个字符 |
[abcd]{3} |
由abcd中字母组成的任意长度为3的字符串 |
abc、dbc、adc |
a、aa、dcbd |
{n,} |
指定至少 n 个匹配 |
[abcd]{3,} |
由abcd中字母组成的任意长度不小于3的字符串 |
aab、dbc、aaabdc |
a、cd、bb |
{n,m} |
指定至少 n 个但不多于 m 个匹配 |
[abcd]{3,5} |
由abcd中字母组成的任意长度不小于3,不大于5的字符串 |
abc、abcd、aaaaa、bcdab |
ab、ababab、a |
^ |
指定起始字符 |
^[0-9]+[a-z]* |
以至少1个数字开头,后接任意个小写字母的字符串 |
123、6aa、555edf |
abc、aaa、a33 |
$ |
指定结束字符 |
^[0-9]\-[a-z]+$ |
以1个数字开头后接连字符“–”,并以至少1个小写字母结尾的字符串 |
2-a、3-ddd、5-efg |
33a、8-、7-Ab |
匹配字符集
匹配字符集是预定义的用于正则表达式中的符号集。如果字符串与字符集中的任何一个字符相匹配,它就会找到这个匹配项。
正则表达式中的部分匹配字符集:
符号 |
含义 |
示例 |
示例 |
匹配输入 |
不匹配输入 |
. |
匹配除 \n 以外的任何字符 |
a..b |
以a开头,b结尾,中间包括2个任意字符的长度为4的字符串 |
aaab、aefb、a35b、a#*b |
ab、aaaa、a347b |
\d |
匹配单个数字字符,相当于[0-9] |
\d{3}(\d)? |
包含3个或4个数字的字符串 |
123、9876 |
123、9876 |
\D |
匹配单个非数字字符,相当于[^0-9] |
\D(\d)* |
以单个非数字字符开头,后接任意个数字字符串 |
a、A342 |
aa、AA78、1234 |
\w |
匹配单个数字、大小写字母字符,相当于[0-9a-zA-Z] |
\d{3}\w{4} |
以3个数字字符开头的长度为7的数字字母字符串 |
234abcd、12345Pe |
58a、Ra46 |
\W |
匹配单个非数字、大小写字母字符,相当于[^0-9a-zA-Z] |
\W+\d{2} |
以至少1个非数字字母字符开头,2个数字字符结尾的字符串 |
#29、#?@10 |
23、#?@100 |
分组构造
常用分组构造形式:
常用分组构造形式 | 说明 |
() | 非命名捕获。捕获匹配的子字符串(或非捕获组)。编号为零的第一个捕获是由整个正则表达式模式匹配的文本,其它捕获结果则根据左括号的顺序从1开始自动编号。 |
(?<name>) | 命名捕获。将匹配的子字符串捕获到一个组名称或编号名称中。用于name的字符串不能包含任何标点符号,并且不能以数字开头。可以使用单引号替代尖括号,例如 (?'name') |
字符转义
如果你想查找元字符本身的话,比如你查找.,或者*,就出现了问题:你没办法指定它们,因为它们会被解释成别的意思。这时你就得使用\来取消这些字符的特殊意义。因此,你应该使用\.和\*。当然,要查找\本身,你也得用\\
例如:deerchao\.net匹配deerchao.NET,C:\\Windows匹配C:\Windows。注意在Java中: (https://github\\.com/[\\w\\-]) 用"\\."配备"."。
常用正则表达式举例
非负整数:“^\d+$ ”
正整数: “ ^[0-9]*[1-9][0-9]*$”
非正整数: “ ^((-\d+)|(0+))$”
整数: “ ^-?\d+$”
英文字符串: “ ^[A-Za-z]+$”
英文字符数字串: “ ^[A-Za-z0-9]+$”
英数字加下划线串: “^\w+$”
E-mail地址:“^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$”
URL:“^[a-zA-Z]+://(\w+(-\w+)*)(\.(\w+(-\w+)*))*(\?\s*)?$”
匹配特定数字
^[1-9]d*$ //匹配正整数
^-[1-9]d*$ //匹配负整数
^-?[1-9]d*$ //匹配整数
^[1-9]d*|0$ //匹配非负整数(正整数 + 0)
^-[1-9]d*|0$ //匹配非正整数(负整数 + 0)
^[1-9]d*.d*|0.d*[1-9]d*$ //匹配正浮点数
^-([1-9]d*.d*|0.d*[1-9]d*)$ //匹配负浮点数
^-?([1-9]d*.d*|0.d*[1-9]d*|0?.0+|0)$ //匹配浮点数
^[1-9]d*.d*|0.d*[1-9]d*|0?.0+|0$ //匹配非负浮点数(正浮点数 + 0)
^(-([1-9]d*.d*|0.d*[1-9]d*))|0?.0+|0$ //匹配非正浮点数(负浮点数 + 0)
匹配特定字符串
^[A-Za-z]+$ //匹配由26个英文字母组成的字符串
^[A-Z]+$ //匹配由26个英文字母的大写组成的字符串
^[a-z]+$ //匹配由26个英文字母的小写组成的字符串
^[A-Za-z0-9]+$ //匹配由数字和26个英文字母组成的字符串
^w+$ //匹配由数字、26个英文字母或者下划线组成的字符串
验证Email地址:“^w+[-+.]w+)*@w+([-.]w+)*.w+([-.]w+)*$”
验证InternetURL:“^http://([w-]+.)+[w-]+(/[w-./?%&=]*)?$”
验证电话号码:“^((d{3,4})|d{3,4}-)?d{7,8}$”
验证身份证号(15位或18位数字):“^d{15}|d{}18$”
验证一年的12个月:“^(0?[1-9]|1[0-2])$”正确格式为:“01”-“09”和“1”“12”
验证一个月的31天:“^((0?[1-9])|((1|2)[0-9])|30|31)$”
匹配中文字符的正则表达式: [u4e00-u9fa5]
匹配双字节字符(包括汉字在内):[^x00-xff]
匹配空行的正则表达式:n[s| ]*r
匹配HTML标记的正则表达式:/< (.*)>.*|< (.*) />/
匹配首尾空格的正则表达式:(^s*)|(s*$)
匹配Email地址的正则表达式:w+([-+.]w+)*@w+([-.]w+)*.w+([-.]w+)*
匹配网址URL的正则表达式:http://([w-]+.)+[w-]+(/[w- ./?%&=]*)?
Java这些常用的正则表达式在处理大数据查找,更新,替换的时候可以极大的提高效率
正则表达式匹配简单语法汇总
1、字母:匹配单个字母
A:表示匹配字母A;
\\:匹配转义字符“\”;
\t:匹配转义字符“\t”;
\n:匹配转义字符“\n”;
2、一组字符:任意匹配里面的一个单个字符
[abc]:表示可能是字母a,可能是字母b或者是字母c;
[^abc]:表示不是字母a,字母b,字母c的任意一个;
[a-zA-Z]:表示全部字母中的任意一个;
[0-9]:表示全部数字的任意一个;
3、边界匹配
^:表示一组正则的开始;
$:表示一组正则的结束;
4、简写表达式:每一位出现的简写标记也只表示一位
· :表示任意的一位字符;
\d :表示任意的一位数字,等价于“[0-9]”;
\D :表示任意的一位非数字,等价于“[~0-9]”;
\w :表示任意的一位字母、数字、_,等价于“[a-zA-Z0-9_]”;
\w :表示任意的一位非字母、数字、_,等价于“[^a-zA-Z0-9_]”;
\s :表示任意的一位空格,例如:\n、\t等;
\S :表示任意的一位非空格;
5、数量表示:之前所有的正则都只是表示一位,如果要表示多位,则就需要数量表示。
?:此正则出现0次或1次;
*:此正则出现0次、1次或多次;
+:次正则出现1次或多次;
{n}:此正则出现正好n次;
{n,}:此正则出现n次以上;
{n,m}:此正则出现n – m次。
6、逻辑表示:与、或、非
正则表达式A正则表达式B: 表达式A之后紧跟着表达式B;
正则表达式|A正则表达式B: 表示表达式A或者表达式B,二者任选一个出现;
(正则表达式):将多个子表达式合成一个表示,作为一组出现。