java正则表达式运用_Java中正则表达式运用实例

正则表达式是很重要,这点就不需要我说什么了。正在学习正则表达式,贴出源代码,以便以后查询:

package cn.kpchen.one;

import org.junit.Test;

public class RegularTest1 {

public static void main(String[] args) {

}

/**

* qq

*/

@Test

public void test1() {

String qq = "1234567";

String reg_qq = "[1-9][0-9]{4,14}";

String reg_qq2 = "[1-9]\\d{4,14}";

boolean bb = qq.matches(reg_qq);

System.out.println(qq + "::" + bb);

}

@Test

public void test2() {

String str = "aooz";

String reg = "ao*z";

boolean b = str.matches(reg);

System.out.println(str + "::" + b);

}

/**

* 手机号码

*/

@Test

public void test4() {

String str = "15395073029";

String reg = "1[3458]\\d{9}";

boolean b = str.matches(reg);

System.out.println(str + "::" + b);

}

/**

* 手机号码 隐藏中间4位

*/

@Test

public void test4_1() {

String str = "15395073029";

String reg = str.replaceAll("(\\d{3})\\d{4}(\\d{4})", "$1****$2");

String string = str.substring(0, 3) + "****"

+ str.substring(7, str.length());

System.out.println(string);

System.out.println(reg);

}

/**

* 切割

*/

@Test

public void test5() {

String str = "15 39 50 73 0 29";

String[] arr = str.split(" +");// 1个或者多个空格

for (String string : arr) {

System.out.println(string);

}

}

/**

* 切割

*/

@Test

public void test6() {

String str = "zhangsan.lisi.wangwu";

String[] arr = str.split("\\.");// .在正则表达式中代表任意字符

for (String string : arr) {

System.out.println(string);

}

}

/**

* 切割

*

* 捕获组可以通过从左到右计算其开括号来编号。例如,在表达式 ((A)(B(C))) 中,存在四个这样的组:

*

* 1 ((A)(B(C))) 2 \A 3 (B(C)) 4 (C)

*/

@Test

public void test7() {

String str = "dwdsqqdfszzzijf";// 以叠词进行切割

// ()表示组, 其中\表示引用组 ,+表示前面一位有一个或者多个

String[] arr = str.split("(.)\\1+");// 两位一致

for (String string : arr) {

System.out.println(string);

}

}

/**

* 替换 将所有的叠词都替换成#

*/

@Test

public void test8() {

String str = "werqqtyuzzzio";

str = str.replaceAll("(.)\\1+", "#");

System.out.println(str);

}

/**

* 替换 将所有的叠词都替换成一个

*/

@Test

public void test9() {

String str = "werqqtyuzzzio";

// 后一个参数可以通过$数字引用前一个参数中的组

str = str.replaceAll("(.)\\1+", "$1");

System.out.println(str);

}

}

package cn.kpchen.two;

import java.util.ArrayList;

import java.util.Arrays;

import java.util.List;

import java.util.regex.Matcher;

import java.util.regex.Pattern;

import org.junit.Test;

public class RegularTest2 {

public static void main(String[] args) {

}

@Test

public void test1() {

Pattern p = Pattern.compile("a*b");

Matcher m = p.matcher("aaaaab");

boolean b = m.matches();

System.out.println(b);

}

@Test

public void test2() {

String str = "da jia zhu yi le ,yao pai wei dian ying la ?";

// \b表示单词的边界

String reg = "\\b[a-z]{3}\\b";// 三个字母组成的单词都取出来

// 正则规则被编译成Pattern对象

Pattern pattern = Pattern.compile(reg);

// 通过正则对象的方法matcher和字符串相关联获取匹配器对象

Matcher matcher = pattern.matcher(str);

while (matcher.find()) {

System.out.println(matcher.start() + "---" + matcher.group()

+ "---" + matcher.end());

}

}

/**

* 找到所有数字并将其排序输出

*

* @author: kpchen

* @createTime: 2014年11月8日 下午3:05:23

* @history: void

*/

@Test

public void test3() {

String s = "346qeije56fqw4r5qfy9qt5qoirad68763214";

String reg = "\\d";

Pattern pattern = Pattern.compile(reg);

Matcher matcher = pattern.matcher(s);

List lists = new ArrayList();

while (matcher.find()) {

lists.add(Integer.parseInt(matcher.group()));

System.out.println(matcher.group());

}

Integer[] array = new Integer[lists.size()];

for (int i = 0; i < array.length; i++) {

array[i] = lists.get(i);

}

Arrays.sort(array);

for (Integer integer : array) {

System.out.print(integer);

}

}

}

1、test1()运行结果:

true

2、test2()运行结果:

3---jia---6

7---zhu---10

18---yao---21

22---pai---25

26---wei---29

3、test3()运行结果:

12334445556666789

package cn.kpchen.three;

import java.util.Arrays;

import org.junit.Test;

public class PegexTest {

/**

* 练习:我我我...我我..我要....学..学...学学..编编程

*/

@Test

public void test1() {

/**

* 1.先去掉所有. 替换

* 2.叠词变成一个 替换

*/

String str = "我我我...我我..我要....学..学...学学..编编程";

System.out.println(str);

str = str.replaceAll("\\.+", "");

System.out.println(str);

str = str.replaceAll("(.)\\1+", "$1");

System.out.println(str);

}

/*

* 对ip地址字符串中的ip进行排序,按照ip的分类顺序

*/

@Test

public void test2() {

String ip = "192.108.90.34 10.10.10.10 5.5.5.5 30.107.100.5 ";

/*

* 为了排序方便,最好将ip中的每一段都是三位,(字典顺序)

* 给每一段进行补零操作

*/

//每位都补两个零

ip = ip.replaceAll("(\\d+)", "00$1");

System.out.println(ip);

//每一段保留最后三位

ip = ip.replaceAll("0*(\\d{3})", "$1");

String[] ips = ip.split(" +");

Arrays.sort(ips);

for (String i : ips) {

//去掉每段前面的零

System.out.println(i.replaceAll("0*(\\d+)", "$1"));

}

}

}1、test1()运行结果:

我我我...我我..我要....学..学...学学..编编程

我我我我我我要学学学学编编程

我要学编程

2.test2()运行结果:

00192.00108.0090.0034  0010.0010.0010.0010   005.005.005.005  0030.00107.00100.005

5.5.5.5

10.10.10.10

30.107.100.5

192.108.90.34

// 查找某个字符串中的特定字符

@Test

public void test1() {

Pattern pattern = Pattern.compile("java");

Matcher matcher = pattern.matcher("java Java JAVa I loveJavA ");

while (matcher.find()) {

System.out.println(matcher.group());

}

}

@Test

public void test2() {

// 不区分大小写查找某个字符串中的特定字符

Pattern pattern = Pattern.compile("java", Pattern.CASE_INSENSITIVE);

Matcher matcher = pattern.matcher("java Java JAVa I loveJavA ");

while (matcher.find()) {

System.out.println(matcher.group());

}

// 将所有匹配的java子串都替换成JAVA

System.out.println(matcher.replaceAll("JAVA"));

}

@Test

public void test3() {

// 不区分大小写

Pattern pattern = Pattern.compile("java", Pattern.CASE_INSENSITIVE);

Matcher matcher = pattern.matcher("java Java JAVa I loveJavA dsfsf");

StringBuffer buf = new StringBuffer();

int i = 0;

while (matcher.find()) {

i++;

// 单数改变为大写,双数改变为小写

if (i % 2 == 0) {

matcher.appendReplacement(buf, "java");

} else {

matcher.appendReplacement(buf, "JAVA");

}

}

// 将尾巴加入到buf中

matcher.appendTail(buf);

System.out.println(buf);

}

@Test

public void test4() {

// 分组

Pattern p = Pattern.compile("(\\d{3,5})([a-z]{2})");

String s = "123aa-3434bb-234cc-00";

Matcher m = p.matcher(s);

while (m.find()) {

System.out.println(m.group());

// System.out.println(m.group(1));

// System.out.println(m.group(2));

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值