正則表示式(Regular Expression)高階使用(文字編輯器,資料庫,Java)
阿新 • • 發佈:2019-01-28
一、開發環境和文字編輯器中使用正則表示式
eclipse
Notepad++
EditPlus
UltraEdit
二、資料庫中也可以使用正則表示式
Mysq15.5以上
Oracle10g以上
例如:
SELECT prod_name FROM products WHERE prod_name REGEXP '.000'
.匹配任意字元
三、Java程式中使用正則表示式
相關類位於:java.util.regex包下面
類Pattern:
正則表示式的編譯表示形式。
Pattern p=Pattern.compile(r,int); //建立正則表示式,並啟用相應模式。
類Matcher:
通過解釋Pattern對character sequence執行匹配操作的引擎
Matcher m=p.matcher(str); //匹配str字串
package regexp;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Demo01 {
public static void main(String[] args) {
//在這個字串:dfsdfsd43324,是否符合指定的正則表示式:\w+
//表示式物件
Pattern pattern = Pattern.compile ("\\w+");
//建立Matcher物件
Matcher matcher = pattern.matcher("dfsdfsd&&43324");//嘗試將整個字串序列與該模式匹配
//boolean yesno = matcher.matches();
//System.out.println(yesno); //flase
//boolean yesno2 = matcher.find();//該方法掃描輸入的序列,查詢與該模式匹配的下一個子序列
//System.out.println(yesno2); //true
System.out.println(matcher.find());
System.out.println(matcher.find());
System.out.println(matcher.find());
System.out.println(matcher.find());
}
}
執行結果:
true
true
false
false
package regexp;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
* 測試正則表示式基本用法
* @author liguodong
*
*/
public class Demo02 {
public static void main(String[] args) {
//在這個字串:dfsdfsd43324,是否符合指定的正則表示式:\w+
//表示式物件
Pattern pattern = Pattern.compile("\\w+");
//建立Matcher物件
Matcher matcher = pattern.matcher("dfsdfsd&&43324");//嘗試將整個字串序列與該模式匹配
/*System.out.println(matcher.find());
System.out.println(matcher.group());
System.out.println(matcher.find());
System.out.println(matcher.group());*/
while(matcher.find())
{
System.out.println(matcher.group());//group()與group(0)匹配整個表示式的子字串
System.out.println(matcher.group(0));
}
}
}
執行結果:
dfsdfsd
dfsdfsd
43324
43324
package regexp;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
* 測試正則表示式物件中分組的處理
* @author liguodong
*
*/
public class Demo03 {
public static void main(String[] args) {
//表示式物件 分組1 分組2
Pattern pattern = Pattern.compile("([a-z]+)([0-9]+)");
//建立Matcher物件
Matcher matcher = pattern.matcher("aads32&&da43324**dsaf32");//嘗試將整個字串序列與該模式匹配
while(matcher.find())
{
System.out.println(matcher.group());//group()與group(0)匹配整個表示式的子字串
//System.out.println(matcher.group(0));
System.out.println(matcher.group(1));
System.out.println(matcher.group(2));
}
}
}
執行結果:
aads32
aads
32
da43324
da
43324
dsaf32
dsaf
32
package regexp;
import java.util.Arrays;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
* 測試正則表示式的物件其他操作
* @author liguodong
*
*/
public class Demo04 {
public static void main(String[] args) {
//在這個字串:dfsdfsd43324,是否符合指定的正則表示式:\w+
//表示式物件
Pattern pattern = Pattern.compile("[0-9]");
//建立Matcher物件
Matcher matcher = pattern.matcher("aads32&&da43324**dsaf32");//嘗試將整個字串序列與該模式匹配
//替換
String newString = matcher.replaceAll("#");
System.out.println(newString);//aads##&&da#####**dsaf##
///////////////////////////////////
//分隔
String string = "a,b,c";
String[] arrs = string.split(",");
System.out.println(Arrays.toString(arrs));
String string1 = "a32b323c32";
String[] arrs1 = string1.split("\\d+");
System.out.println(Arrays.toString(arrs1));
}
}
執行結果:
aads##&&da#####**dsaf##
[a, b, c]
[a, b, c]
package regexp;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
* 網路爬蟲取連結 wget
* @author liguodong
*/
public class WebSpider {
public static void main(String[] args) {
String destString = getURLContent("http://www.baidu.com");
//System.out.println(destString);
//1、 獲取超連結整個內容<a></a>
//<a[\s\S]+?</a>
/*Pattern pattern = Pattern.compile("<a[\\s\\S]+?</a>");
Matcher matcher = pattern.matcher(destString);
while(matcher.find()){
System.out.println(matcher.group());
}*/
//2、 獲取href的內容
/*Pattern pattern = Pattern.compile("href=\".+?\"");
Matcher matcher = pattern.matcher(destString);
while(matcher.find()){
System.out.println(matcher.group());
}*/
//3、 獲取超連結的地址
//採用預搜尋(零寬斷言) 或者 通過程式裡面加括號進行分組
/*Pattern pattern = Pattern.compile("href=\"(.+?)\"");
Matcher matcher = pattern.matcher(destString);
while(matcher.find()){
System.out.println(matcher.group());
System.out.println(matcher.group(1));
}*/
List<String> resultList = getMatherSubstrs(destString, "href=\"(h.+?)\"");
for (String string : resultList) {
System.out.println(string);
}
}
public static List<String> getMatherSubstrs(String destStr,String regexStr){
//4、 獲取超連結的地址
//採用預搜尋(零寬斷言) 或者 通過程式裡面加括號進行分組
Pattern pattern = Pattern.compile(regexStr);
Matcher matcher = pattern.matcher(destStr);
List<String> result = new ArrayList<String>();
while(matcher.find()){
/*System.out.println(matcher.group());
System.out.println(matcher.group(1));*/
result.add(matcher.group(1));
}
return result;
}
/**
* 獲得urlStr網頁原始碼的內容
* @param urlStr
* @return
*/
public static String getURLContent(String urlStr){
StringBuilder sb = new StringBuilder();
try {
URL url = new URL(urlStr);
BufferedReader reader = new BufferedReader(new InputStreamReader(url.openStream()));
String tempString = "";
while((tempString=reader.readLine())!=null){
//System.out.println(tempString);
sb.append(tempString);
}
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return sb.toString();
}
}