发新话题

java regex 正则部分高级特性使用

import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.junit.Assert;
import org.junit.Test;

/**
 * 
 * @author 赵学庆 www.java2000.net
 *
 */
public class MyTest {
  @Test
  /**
   * <p>
   * 向前\向后查找
   * </p>
   */
  public void unit9() throws Exception {
    String testStr = "http://www.google.com";
    /*
     * 一般查找 .+(:) 查询出结果包含 :
     */
    Pattern pattern = Pattern.compile(".+(:)");
    Matcher matcher = pattern.matcher(testStr);
    Assert.assertTrue("错误: 查找出结果通过 .+(:) 此regex没有包含 : ", matcher.find() && matcher.group().equals("http:"));
    /*
     * 向前查找 .+(?=:) 查询结果不包含 :
     */
    Pattern pattern2 = Pattern.compile(".+(?=:)");
    Matcher matcher2 = pattern2.matcher(testStr);
    Assert.assertTrue("错误: 查找出结果通过 .+(?=:) 此regex有包含 : ", matcher2.find() && matcher2.group().equals("http"));
    /*
     * 向后查找 (?<=:).+
     */
    Pattern pattern3 = Pattern.compile("(?<=://).+");
    Matcher matcher3 = pattern3.matcher(testStr);
    Assert.assertTrue("错误:查找出结果包含 http:// 不向后查询", matcher3.find() && matcher3.group().equals("www.google.com"));
  }

  @Test
  /**
   * 回朔应用 查询回朔、回朔替换、回朔大小写替换
   */
  public void unit8() throws Exception {
    String testStr = "this is a block of of test," + " several words here are are "
        + " repeated , and and they should not be. ";
    Pattern pattern = Pattern.compile("[ ]+(\\w+)[ ]+\\1");
    Matcher matcher = pattern.matcher(testStr);
    // 查询结果 are are
    Assert.assertTrue("错误:regex 不匹配 ", matcher.find() && matcher.group().split(" ").length >= 2);
    while (matcher.find()) {
      Assert.assertTrue("错误:regex 不匹配 ", matcher.group().split(" ").length >= 2);
    }
    // 替换
    String testStr2s = "313-555-1234";
    Pattern pattern2 = Pattern.compile("(\\d{3})(-)(\\d{3})(-)(\\d{4})");
    Matcher mtmp = pattern2.matcher(testStr2s);
    Assert.assertTrue("错误:没有查替换", mtmp.find() && mtmp.replaceAll("($1) $3-$5").equals("(313) 555-1234"));
    /*
     * 大小写替换(java 不能成功) \E 结束 \L 或 \U转换 \l \L 把下一个字符(串)换为小写 \ u \U 把下一个字符(串)转换为大写
     */
    String testStr3 = "tt:google:xx";
    Pattern pattern3 = Pattern.compile("(?<=:)(.+)(?=:)");
    Matcher matcher2 = pattern3.matcher(testStr3);
    if (matcher2.find())
      System.out.println(matcher2.group());
  }
}
快乐渡过每一天,减肥坚持每一天



编辑 回复 快速回复 TOP
顶一个。。
Everyone is No 1~``
编辑 回复 快速回复 TOP
发新话题