正则表达式的总结

  1. 1、Java正则表达式

字符
B指定字符B
\xhh十六进制值为oxhh等等字符
\uhhhh十六进制表示为oxhhhh的Unicode字符
\t制表符Tab
\n换行符
\r回车
\f转页
\e转义(Escape)

 

字符类
.任意字符
[abc]包含a、b和c的任何字符(和a|b|c作用相同)
[^abc]除了a、b和c之外的任何字符(否定)
[a-zA-Z]从a到z或从A到Z的任何字符(范围)
[abc[hij]]任意a、b、c、h、i和j字符(合并)并集
[a-z&&[hij]]任意h、i或j(交集)
\s空白符(空格、tab、换行、换页和回车)
\S非空白符
\d数字[0-9]
\D非数字[^0-9]
\w词字符[a-zA-Z0-9]
\W非词字符[^\w]

 

逻辑操作符
XYY跟在X后面
X|YX或Y
(X)捕获组(capturing group)
边界匹配符
^一行的开始
$一行的结束
\b词的边界
\B非词的边界
\G前一个匹配的结束

 

量词
贪婪型勉强型占有型如何匹配
X?X??X?+一个或零个X
X*X*?X*+零个或多个X
X+X+?X++一个或多个X
X{n}X{n}?x{n}+恰好n次X
X{n,}x{n,}?x{n,}+至少n次X
X{n,m}X{n,m}?X{n,m}+X至少n次,且不能超过m次

 

模式标记
编译标记效果
Pattern.CANON_EQ两个字符当且仅当他们的完全规范分解相匹配时,就认为他们是相匹配的。
Pattern.CASE_INSENSITIVE(?i)不考虑大小写
Pattern.COMMENTS(?x)在这种模式下,空格符被忽略掉,并且一#开始的注释也会被忽略掉
Pattern.DOTALL(?s)在dotall下表达式"."匹配所有字符,包括行终结符,默认是不包括的
Pattern.MULTILINE(?m)在多行模式下,表达式^和$分别匹配一行的开始和结束
Pattern.UNICODE_CASE(?u)当指定这个标记时,并且开启CASE_INSENSITIVE时,大小写不敏感的匹配按照Unicode来进行,默认只能在US_ASCII字符才能进行
  
Pattern pattern=Pattern.compile("\\w+@\\w+(.com)",Pattern.CASE_INSENSITIVE);

常用方法:

static Patterncompile(String regex)

将给定的正则表达式编译为模式。

Matchermatcher(CharSequence input)

创建一个匹配器,匹配给定的输入与此模式。

boolean

 

find()

尝试找到匹配模式的输入序列的下一个子序列。

Stringgroup()

返回与上一个匹配匹配的输入子序列。

booleanmatches()

尝试将整个区域与模式进行匹配。

intstart()

返回上一个匹配的起始索引。

booleanlookingAt()

尝试将输入序列从区域开头开始与模式相匹配。

intgroupCount()

返回此匹配器模式中捕获组的数量。

StringreplaceAll(String replacement)

将与模式匹配的输入序列的每个子序列替换为给定的替换字符串。

 

程序实例:

 

package com.luther.regx;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class RehularExpression {
	private static String regString="abcabcabcdefabc";
	public static void main(String[] args) {
		String []reg={"abc+","(abc)+","(abc){2,}"};
		for(String regex:reg){
			Pattern pattern=Pattern.compile(regex);
			Matcher matcher = pattern.matcher(regString);
			while(matcher.find()){
				System.out.println("Match"+"\t"+regex+"\t"+matcher.group()+"\t"+matcher.start()+"\t"+(matcher.end()-1));
			}
		}
	}
}

package com.luther.regx;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class RegexDemo {
	static final String POEM=
	"Twas brilind ew wrewr dsff\n"+
	"dadw wwqwe wfwef werew\n"+
	"dwewr frefre erfef";
	public static void main(String[] args) {
		Matcher matcher = Pattern.compile("(?m)(\\S+)\\s+((\\S+)\\s+(\\S+))$").matcher(POEM);
		System.out.println(matcher.groupCount());
		while(matcher.find()){
			System.out.println(matcher.group()+"---");
		}
	}
}

package com.luther.regx;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Examine {
	static String regString="1723484@qq.com";
	public static void main(String[] args) {
		Pattern pattern=Pattern.compile("\\w+@\\w+(.com)");
		Matcher matcher = pattern.matcher(regString);
		boolean matches = matcher.matches();
		System.out.println(matches);
	}
}

package com.luther.regx;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Demo {
	static String nameString="iurwiur!!jje!uhuie!!!huheihf!!";
	public static void main(String[] args) {
		String[] split = nameString.split("!+");
		for(String nString:split){
			System.out.println(nString);
		}
		Pattern compile = Pattern.compile("!+");
		Matcher matcher = compile.matcher(nameString);
		String replaceAll = matcher.replaceFirst("----");
		System.out.println(replaceAll);
//更换操作的字符串
		Matcher reset = matcher.reset(replaceAll);
		String replaceFirst = reset.replaceAll("****");
		System.out.println(replaceFirst);
	}
}

package com.luther.regx;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class BufDemo {
	
	public static void main(String[] args) {
		String nString="addewew ahudie owoeirur";
		Pattern compile = Pattern.compile("[aeiou]");
		Matcher matcher = compile.matcher(nString);
		StringBuffer sb=new StringBuffer();
				
		while(matcher.find()){
			//遍历所有的替换操作再调用appendTail(sb);
			matcher.appendReplacement(sb, matcher.group().toUpperCase());
			
		}
		matcher.appendTail(sb);
		System.out.println(sb);
	}
}

JavaScript的正则表达式:

i执行对大小写不敏感的匹配。
g执行全局匹配(查找所有匹配而非在找到第一个匹配后停止)。
m执行多行匹配。

str="abcabcssabc

常用方法:

str.match(reg);

reg.test(str);

reg.exec(str);

str.search(reg);

str.replace(reg,"!);

str.split(reg);

var str="abcabcsscabc";
var regx=/abc/g
var word=str.match(regx); //返回的是一个数组(out(abc  abc abc))

var bool =regx.test(str);
dv.html(bool);//返回的是Boolean类型的数据 (ture)

var str="abcdabcabc";
var regx=/abc/g
var dv=$("div");			
var s=regx.exec(str);
dv.html(s);//返回的是匹配的字符串  abc 如果没有的话返回的是null


var regx=/abc/g
var data="aadsa,sadsad,kk,ads,kk,abc";
var da=data.search(regx);//返回的是索引的位置(out 23)
dv.html(da);


var dv=$("div");
var data="aadsa,sadsad,kk,ads,kk,abc";
var regx=/,/g;
var a=data.replace(regx,"!");//把匹配到的字符与!进行替换,返回替换后的字符串
dv.html(a)


var dv=$("div");
var data="aadsa,sadsad,kk,ads,kk,abc";
var regx=/,/g;
var a=data.split(regx);//根据匹配到字符串进行分割,舍弃匹配到的字符
dv.html(a[0]+"  "+a[1]);

代码实例:(下面的代码只是简单的操作了一下登录,并没有对表单进行判断)

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>JavaScript的正则演示</title>
		<script type="text/javascript" src="jquery-3.1.1.js" charset="UTF-8"></script>
		<script type="text/javascript">
			var reg=/^\w{6,10}@[a-zA-Z]{0,5}(\.com)$/gi;
			var regpassword=/^(?![^a-zA-Z]+$)(?![^0-9]+$)[a-zA-Z0-9]{8,20}$/gi;
			$(function(){
				$(":text:eq(0)").blur(function(){
					if($(this).val().match(/^\w{6,10}$/)){
						$(this).next().css("color","green").html("√");
					}else{
						$(this).next().css("color","red").html("X");
					}
				});
				$(":password:eq(0)").blur(function(){
					if($(this).val().match(regpassword)){
						$(this).next().css("color","green").html("√");
						
					}else{
						$(this).next().css("color","red").html("密码不可以低于八位,且必须是数字与密码的组合");
					}
				});
				$(":password:eq(1)").blur(function(){
					if($(this).val()==($(":password:eq(0)").val())){
						$(this).next().css("color","green").html("√");
					}else{
						$(this).next().css("color","red").html("两次密码不一致");
					}
				});
				$(":text:eq(1)").blur(function(){
					if(reg.test($(this).val())){
						$(this).next().css("color","green").html("√");
					}else{
						$(this).next().css("color","red").html("X");
					}
					/* 返回的是注册成功的指 */
					alert(reg.exec($(this).val()));
				});
				
			});	
		</script>
	</head>
	<body>
		<form method="post">
			<table align="center">
				<tr>
					<td>UserName:</td>
					<td><input type="text" name="username"><span></span></td>
				</tr>
				<tr>
					<td>Password</td>
					<td><input type="password" name="password"><span></span></td>
				</tr>
				<tr>
					<td>RePassword:</td>
					<td><input type="password" name="repassword"><span></span></td>
				</tr>
				<tr>
					<td>E-Mail</td>
					<td><input type="text" name="mail"><span></span></td>
				</tr>
				<tr>
					<td>Date</td>
					<td><input type="date" name="date"></td>
				</tr>
				<tr><th colspan="2"><input type="submit" value="Login"><span></span></th></tr>
			</table>
		</form>
	</body>
</html>

可以看出复杂的正匹配与Java的区别不是太大,如果想要了解JavaScript正则表达式的细节,建议参考这篇文章https://www.cnblogs.com/ghostgift/archive/2013/03/28/2980406.html#undefined

其中上面用到了一条正则表达式做一下简单的解释:

var regpassword=/^(?![^a-zA-Z]+$)(?![^0-9]+$)[a-zA-Z0-9]{8,20}$/gi;

这段代码是来判断我们的密码必须要有字母和数字的组合。

^:正则的开始

$:正则的结束

(?![^a-zA-Z]+$):从当前位置到结束前,匹配的字符串不能全为字母

(?![^0-9]+$):从当前位置到结束前,匹配的字符串不能全为数字

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值