您的位置:首页 > 其它

正则表达式的学习和练习

2018-01-23 14:36 204 查看
正则表达式通常被用来检索、替换那些符合某个模式(规则)的文本。是用正则表达式来完成邮箱,账号的验证可以省去繁杂的逻辑,用更少的代码完成更复杂的事务。

通过学习我大致把当前学习的常见的字符分为四种:

1,预定义字符类

.:任何字符

\d : 数字[0-9]

\D:非数字[^0-9]

\s : 空白字符[\t\n\xOB\f\r]

\S : 非空白字符[^\s]

\w : 单词字符[a-zA-Z_0-9]

\W : 非单词字符[^\w]

2,数量词

X? X,一次或一次也没有;

X* X,零次或多次;

X+ X,一次或多次;

X{n} X,恰好n次;

X{n,} X,至少n次;

X{n,m} X,至少n次,不超过m次;

3,表示逻辑运算的词

正则表达式中的逻辑运算的词和java中逻辑运算符基本相同,除了逻辑非在正则表达式中是使用 ^ 表示

4,三个括号的使用

[ ]方括号中一般放预定义字符类,多个字符之间用默认逻辑或连接。

例如:

[abc] 表示a或b或c

[A-Za-z_0-9] 表示单词字符

{ }花括号表示数量词

( )圆括号表示捕获组,圆括号中的内容作为一组来被识别

例如:

(abc) 表示abc

在圆括号中可以使用逻辑符号连接

例如:

(abc|def)表示abc或def

感觉把正则表达式大致的分为这三个类会更好理解,记忆,学习以及使用

在API文档Pattern类下提供的正则表达式的典型调用方法是

在API文档Pattern类下提供的正则表达式的典型调用方法是

Pattern p = Pattern.compile("a*b");
Matcher m = p.matcher("aaaaab");
boolean b = m.matches();


平时使用时可以直接调用String类下的matchs()方法

matches

public boolean matches(String regex)告知此字符串是否匹配给定的正则表达式。

调用此方法的 str.matches(regex) 形式与以下表达式产生的结果完全相同:

Pattern.matches(regex, str)

参数:

regex - 用来匹配此字符串的正则表达式

返回:

当且仅当此字符串匹配给定的正则表达式时,返回 true

抛出:

PatternSyntaxException - 如果正则表达式的语法无效

从以下版本开始:

1.4

另请参见:

Pattern

正则表达式的常见应用

用正则表达式验证邮箱账号

/**
* 邮箱验证
*6-18位任意单词字符+@+2-6位任意单词字符+一位或多位.+任意单词字符
*/
public static void test1(String str2) {
String str="\\w{6,18}@\\w{2,6}(\\.\\w)+";
//Scanner sc=new Scanner(System.in);
System.out.println("请输入邮箱");
//String str2=sc.next();
System.out.println("str2.matches(str)     "+str2.matches(str));
}


2 .正则表达式完成切割指定字符的功能
4000

/**
*
* 切割 字符串中的逗号
*/
public static void test2() {

String numbers="1,2,3,4,5,6,7,8,9,0";
String regex=",";
String [] str=numbers.split(regex);
for(int i=0;i<str.length;i++) {
System.out.println(str[i]);
}

}


3 . 正则表达式玩成替换指定字符的功能

/**
*
*  替换字符串中的单词字母
*/
public static void testReplace() {
String str="aaaa1ahnvuhfewoi11384209e7439fsdhfdohd8892489";
String regex="[a-zA-Z]";
String str2=str.replaceAll(regex, "");
System.out.println(str2);
//输出   11138420974398892489
}


4 . 匹配并取出指定的字符串

/**
*
*
* 取出指定的字符串
*/
public static void testBoundary() {
// 定义字符串
String s = "abc 1234 efg a d,e hhh aa";

// 规则 单词边界+三位任意字符+单词边界
String regex = "\\b\\w{3}\\b";

// 把规则编译成模式对象
Pattern p = Pattern.compile(regex);
// 通过模式对象得到匹配器对象
Matcher m = p.matcher(s);
// 调用匹配器对象的功能
// 通过find方法就是查找有没有满足条件的子串

//第一步,找到 find()
while (m.find()) {
//第二步 ,把找到的东西拿出来  group
String string = m.group();
System.out.println(string);
//输出abc efg hhh
}

}


5.正则表达式的分组功能

/**
*
* 分组
* (..)表示两位任意字符(...)表示三位任意字符1+表示第一个()的内容重复
* 一次或者多次
*/
public static void testRegexGroup() {
String regex="(..)(...)\\1+";
System.out.println("高兴高高兴高兴高兴高兴高兴".matches(regex));
//输出true
System.out.println("快快乐乐".matches(regex));
//输出false
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  正则表达式