在使用Pattern.compile函數時,可以加入控制正則表達式的匹配行爲的參數:
Pattern Pattern.compile(String regex, int flag)
將給定的正則表達式編譯到具有給定標誌的模式中。
flag的取值範圍如下:
二。下面寫出幾個簡單的Java正則用例:
◆比如,在字符串包含驗證時
//查找以Java開頭,任意結尾的字符串
Pattern pattern = Pattern.compile("^Java.*");
Matcher matcher = pattern.matcher("Java不是人");
boolean b= matcher.matches();
//當條件滿足時,將返回true,否則返回false
System.out.println(b);
◆以多條件分割字符串時
Pattern pattern = Pattern.compile("[, |]+");
String[] strs = pattern.split("Java Hello World Java,Hello,,World|Sun");
for (int i=0;i<strs.length;i++) {
System.out.println(strs[i]);
}
◆文字替換(首次出現字符)
Pattern pattern = Pattern.compile("正則表達式");
Matcher matcher = pattern.matcher("正則表達式 Hello World,正則表達式 HelloWorld");
//替換第一個符合正則的數據
System.out.println(matcher.replaceFirst("Java"));
◆文字替換(全部)
Pattern pattern = Pattern.compile("正則表達式");
Matcher matcher = pattern.matcher("正則表達式 Hello World,正則表達式 HelloWorld");
//替換第一個符合正則的數據
System.out.println(matcher.replaceAll("Java"));
◆文字替換(置換字符)
Pattern pattern = Pattern.compile("正則表達式");
Matcher matcher = pattern.matcher("正則表達式 Hello World,正則表達式 HelloWorld ");
StringBuffer sbr = new StringBuffer();
while (matcher.find()) {
matcher.appendReplacement(sbr, "Java");
}
matcher.appendTail(sbr);
System.out.println(sbr.toString());
◆驗證是否爲郵箱地址
String str="[email protected]";
Pattern pattern =Pattern.compile("[//w//.//-]+@([//w//-]+//.)+[//w//-]+",Pattern.CASE_INSENSITIVE);
Matcher matcher = pattern.matcher(str);
System.out.println(matcher.matches());
◆去除html標記
Pattern pattern = Pattern.compile("<.+?>", Pattern.DOTALL);
Matcher matcher = pattern.matcher("<a href=/"index.html/">主頁</a>");
String string = matcher.replaceAll("");
System.out.println(string);
◆查找html中對應條件字符串
Pattern pattern = Pattern.compile("href=/"(.+?)/"");
Matcher matcher = pattern.matcher("<a href=/"index.html/">主頁</a>");
if(matcher.find())
System.out.println(matcher.group(1));
}
◆截取http://地址
//截取url
Pattern pattern =Pattern.compile("(http://|https://){1}[//w//.//-/:]+");
Matcher matcher =pattern.matcher("dsdsds<http://dsds//gfgffdfd>fdf");
StringBuffer buffer = new StringBuffer();
while(matcher.find()){
buffer.append(matcher.group());
buffer.append("/r/n");
System.out.println(buffer.toString());
}
◆替換指定{}中文字
String str = "Java目前的發展史是由{0}年-{1}年";
String[][] object={new String[]{"//{0//}","1995"},newString[]{"//{1//}","2007"}};
System.out.println(replace(str,object));
public static String replace(final String sourceString,Object[] object) {
Stringtemp=sourceString;
for(inti=0;i<object.length;i++){
String[]result=(String[])object[i];
Pattern pattern = Pattern.compile(result[0]);
Matchermatcher = pattern.matcher(temp);
temp=matcher.replaceAll(result[1]);
}
return temp;
}
◆以正則條件查詢指定目錄下文件
//用於緩存文件列表
private ArrayList files = newArrayList();
//用於承載文件路徑
private String _path;
//用於承載未合併的正則公式
private String _regexp;
class MyFileFilter implements FileFilter{
/**
* 匹配文件名稱
*/
public booleanaccept(File file) {
try{
Pattern pattern = Pattern.compile(_regexp);
Matcher match = pattern.matcher(file.getName());
return match.matches();
}catch (Exception e) {
return true;
}
}
}
/**
* 解析輸入流
* @param inputs
*/
FilesAnalyze (String path,String regexp){
getFileName(path,regexp);
}
/**
* 分析文件名並加入files
* @param input
*/
private void getFileName(Stringpath,String regexp) {
//目錄
_path=path;
_regexp=regexp;
File directory= new File(_path);
File[]filesFile = directory.listFiles(new MyFileFilter());
if (filesFile== null) return;
for (int j = 0;j < filesFile.length; j++) {
files.add(filesFile[j]);
}
return;
}
/**
* 顯示輸出信息
* @param out
*/
public void print (PrintStream out) {
Iterator elements =files.iterator();
while(elements.hasNext()) {
File file=(File) elements.next();
out.println(file.getPath());
}
}
public static void output(String path,Stringregexp) {
FilesAnalyzefileGroup1 = new FilesAnalyze(path,regexp);
fileGroup1.print(System.out);
}
public static void main (String[] args) {
output("C://","[A-z|.]*");
}