Java正则表达式入门到精通

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Java 正则表达式快速入门儿到精通Java jdk提供大量的正则表达式工具,使您能够高效地创建、比较和修改字符串,以及迅速地分析大量文本和数据以搜索、移除和替换文本
下面是我学习时候的一些例子;每一个我都给出了注释;下面的代码可以直接
执行;
具体的细节可参照API文档和实际应用来进行详细学习和提高;
package xinxi.software.shinnexi.regexp;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class RegTest {
public static void main(String[] args) {
String str = "asdfaadfgx";
p(str.matches("..."));
p(str.replaceAll("\\d", "-"));
Pattern pattern = pile("[a-z]{3}");// 提前编译该正则表达式;返回该正则表达式的Pattern模式;
Matcher matcher = pattern.matcher(str);// 匹配的过程会产生多种结果,均保存在matcher中;
p(matcher.matches());// 返回是否与正则表达式匹配;
p(str.matches("[a-z]{10}"));
// . * + ?
System.out.println("hahhahahfadfadfadsfasdfadsf");
p("a".matches("."));// '.' Instead of a character;
p("aa".matches("aa"));// matches 'a''a';
p("aaaa".matches("a*"));//
p("aaaa".matches("a+"));// '+' one or more times ;
p("".matches("a*"));// '*' zero or more times;
p("aaaa".matches("a?"));// '?'exists once or zero times;
p("".matches("a?"));// zero lines matches;
p("a".matches("a?"));//
p("46546464645460".matches("\\d{3,100}"));// matches at least three
// times but not more than
// 100 times;
p("192.168.0.123".matches("\\d{1,3}\\.\\d{1,3}\\.\\d{1,3} \\.\\d{1,3}"));//
p("152".matches("[0-2][0-9][0-9]"));// ip ;
//
///////////////////////////////////////////////////////////
/////////
// Range ;
p("a".matches("[abc]"));// 取abc三者之一的;
p("a".matches("[^abc]"));// 取abc之外的其他字符;
p("A".matches("[a-zA-Z]"));// 取a到z或者A-Z之间的一个字
符;
p("A".matches("[a-z]|[A-Z]"));// 同上;
p("B".matches("[a-z[A-Z]]"));// 同上;
p("R".matches("[A-Z&&[RFG]]"));// 取A-Z之间的并且是RFG之
一的一个字符;
//
///////////////////////////////////////////////////////////
///////////
// Specify character matches;
p(" \\n\\r\\t".matches("[\\s{4}]"));// 空白字符;
p(" ".matches("\\S"));// 非空白字符;
p("a_8".matches("\\w{3}"));// matches\\w= [a-zA-Z_0-9];
p("abc888*&%^".matches("[a-z]{1,3}\\d+[*!@#$%^&*]+"));
p("\\".matches("\\\\"));
//
///////////////////////////////////////////////////////////
///////////
// POSIX pattern in Unix;
p("".matches("\\p{Lower}"));// etc.;
//
///////////////////////////////////////////////////////////
///////////
p("hello sir".matches("^h.*"));
p("hello sir".matches(".*ir$"));
p("hello sir".matches("^h[a-z]{1,3}.*o\\b.*"));// "\\b" instead of
// boundary of word is
// include specify
// character;
p("hellosir".matches("^h[a-z]{1,3}.*o\\b.*"));
//
///////////////////////////////////////////////////////////
///////////
// verify white line ;
p(" \n".matches("^[\\s&&[^\\n]]*\\n$"));
p("aaa8888c".matches(".*\\d{4}."));
p("aaa 8888c".matches(".*\\b\\d{4}."));
p("aaa 8888c".matches(".*\\d{4}."));
p("aaa8888c".matches(".*\\b\\d{4}."));// result is
false the clause is
// that have no word boundary is string ;
//
/////////////////////////////////////////////////////////// ///////////////
// e-mail regular expression ;
p("".matches("[\\w[.-]]+@[\\w[.-]]+\\.[\\w]+"));// "\\."is
// instead
// of '.';
//
/////////////////////////////////////////////////////////// ///////////////
// Qualifier
// Pattern p = pile("(.{3,10}?)[0-9]");//在默认情况下使用的是greed模式;每次就吞进最长的数量;如果不行就吐出一个字符进行匹配;
//使用了X? Reluctant模式称为懒惰模式,每次尽量以最小的字符数量吞进;来进行与pattern进行匹配;
Pattern p =pile("(.{3,10}+)[0-9]");//使用possessive 模式的.首先吞进最大的数量,然后直接往后边进行匹配;
//没有找到就返回没有找到;而不会往后退;
String strs = "fghj5vbnm4";
Matcher m = p.matcher(strs);
while (m.find()) {
p(m.group());
p(m.start()+"--"+ m.end());
}
Pattern p2 =pile("(.{3})(?=a)");//向前不是a 的;如果放到前边则表示是a的字符;
///////////////////////////////////////////////////////// //////////////////////
//back reference ;
Pattern p3 =Pattern .compile("\\d\\d\\1");//后边的这个{1}代表的是后边匹配的字符串必须和第{一}个组取到的字符串一样才行;
}
/**
* this method is convenience to print object ;
*/
public static void p(Object o) {
System.out.println(o);
}
}
lookingat();
package xinxi.software.shinnexi.regexp;
import java.util.regex.*;
public class Matches_find_lookingAt {
public static void main(String[] args) {
Pattern p = pile("\\d{3,5}");
String str = "123-4567-12345-345678";
Matcher m = p.matcher(str);
p(m.matches());// 返回是否匹配;指针留在了第一个不符合的位置;
m.reset();// 重新设定正则表达式的匹配引擎的指针;回到开始点;
m.find();// 从头开始逐个查找匹配的子字符串;并且定为到第一个查到以后的位置;
// 如果不调用reset();则在后续的find()中会从matches方法的不匹配的地方开始往后边find;
p(m.start() + "--" + m.end());// 从查找到的开始位置startlocation 和endlocation ;
// 前提是保证能够找到子串;;
m.find();// 从第一个查找到的位置开始,,,往后查找;
p(m.start() + "--" + m.end());
m.find();// and so on ;
p(m.start() + "--" + m.end());
m.find();// and so on ;
p(m.start() + "--" + m.end());
p(m.lookingAt());// 從頭開始查找;每次都從開始的位置查找;
p(m.lookingAt());// 每次都從開始的位置開始查找不記錄匹配引擎的指針位置;
p(m.lookingAt());// and so on;
//
/////////////////////////////////////////////////////////// //////////
// replacement;
Pattern pattern = pile("java",
Pattern.CASE_INSENSITIVE);// 对大小写不敏感;
//flags 简写;
//str.matches("(?i)java");//该种写法相当于
CASE_INSENSITIVE简写形式;
String str2 = "java Java JJava JAVa IloveJava Ilove you jaVa afdsfadsfad";
Matcher matches = pattern.matcher(str2);
/*
* while(matches.find()){ p(matches.group());// 如果匹配就返回匹配的字符串组 ;
* 其中"java"就是字符串组0; }
*/
StringBuffer buf = new StringBuffer();
int i = 0;
while (matches.find()) {
i++;
if (i % 2 == 0) {
matches.appendReplacement(buf, "java");// 用后边的字符串替换源字符串中的匹配位置;然后添加到stringbuffer中;
} else {
matches.appendReplacement(buf, "JAVA");
}
}
matches.appendTail(buf);// append tail to the specify stringbuffer;
p(buf);// print;
//
///////////////////////////////////////////////////////////
//////////
// group;
Pattern patternTest =
pile("(\\d{3,5})([a-z]{2})");
String strGroup = "4656as-345ree-21345nj-df";
Matcher matcherTest = patternTest.matcher(strGroup);
while (matcherTest.find()) {
p(matcherTest.group());// using the "()" to divide group ;
// depend the '(' layers to verify what number group;
}
//
///////////////////////////////////////////////////////////
//////////
}
public static void p(Object o) {
System.out.println(o);
}
}
注:以上代码虽然没有几行,但是每几小行均代表了一个实例和应用,另外以上代码我均给出了详细的解释;如有不明之处可以联系我,我们进行共同的学习和提高;呵呵呵,↖(^ω^)↗;。

相关文档
最新文档