相信很多人都對正則有很深的交情,畢竟這玩意功能太強了,幾乎無處不在。我最長用的正則還是爬蟲。爬蟲分兩類,一種是接口返回json數據的,一種是返回HTML數據的。
對於第一種返回json數據的可以直接用jsonobject解析。而第二種往往用HTML解析類做起來比較麻煩,特別是提取表單信息的時候,所以我直接當做string信息,通過正則表達式提取想要的信息。
下面分享幾個案例:
Java正則裡面用到了一個Java的正則工具類,算是寫了Java的正則Demo,代碼如下:
package com.fun.utils;
import com.fun.frame.SourceCode;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
* 正則驗證的封裝
*/
public class Regex extends SourceCode {
private static Logger logger = LoggerFactory.getLogger(Regex.class);
/**
* 正則校驗文本是否匹配
*
* @param text 需要匹配的文本
* @param regex 正則表達式
* @return
*/
public static boolean isRegex(String text, String regex) {
return Pattern.compile(regex).matcher(text).find();
}
/**
* 正則校驗文本是否完全匹配,不包含其他雜項,相當於加上了^和$
*
* @param text 需要匹配的文本
* @param regex 正則表達式
* @return
*/
public static boolean isMatch(String text, String regex) {
return Pattern.compile(regex).matcher(text).matches();
}
/**
* 返回所有匹配項
*
* @param text 需要匹配的文本
* @param regex 正則表達式
* @return
*/
public static List<String> regexAll(String text, String regex) {
List<String> result = new ArrayList<>();
Matcher matcher = Pattern.compile(regex).matcher(text);
while (matcher.find()) {
result.add(matcher.group());
}
return result;
}
/**
* 獲取匹配項,不包含文字信息,會刪除regex的內容
* <p>不保證完全正確</p>
*
* @param text
* @param regex
* @return
*/
public static String getRegex(String text, String regex) {
String result = EMPTY;
try {
result = regexAll(text, regex).get(0);
String[] split = regex.split("(\\.|\\+|\\*|\\?)");
for (int i = 0; i < split.length; i++) {
String s1 = split[i];
if (!s1.isEmpty())
result = result.replaceAll(s1, EMPTY);
}
} catch (Exception e) {
logger.warn("獲取匹配對象失敗!", e);
} finally {
return result;
}
}
}
Groovy正則首先來講,Groovy完全可以使用Java的正則語法,上面的正則工具類完全適用於Groovy腳本,我的爬蟲Demo裡面基本上也都是在Groovy腳本裡面直接使用的這個工具類。
下面分享一下Groovy語言自己的正則表達式。其中最重要的三個符號=~相當於Java裡面的Pattern.compile(regex).matcher(text),然後==~相當於Pattern.compile(regex).matcher(text).match(),這裡不是find(),兩者區別請自行搜索,還有一個寫法def stra = /.*test\w+/,專指正則表達式,使用收尾都加上/而不是"。
下面是我的Demo:
public static void main(String[] args) {
def str = "fantester"
def matcher = str =~ "\\wt"
println matcher.find()
println matcher[0]
println matcher.size()
matcher.each {println it}
def b = str ==~ ".*er"
output b
def stra = /.*test\w+/
println str ==~ stra
("fanfanfanfan" =~ "\\wf").each {println it}
"fanfanfanfan".eachMatch(/\wa/) {println it}
}控制臺輸出如下:
INFO-> 當前用戶:fv,IP:192.168.0.100,工作目錄:/Users/fv/Documents/workspace/fun/,系統編碼格式:UTF-8,系統Mac OS X版本:10.15.3
true
nt
2
nt
st
INFO-> true
true
nf
nf
nf
fa
fa
fa
fa
Process finished with exit code 0Groovy語法還是有很強的可玩性的,雖然基本兼容Java語法,但是深入了解Groovy之後,是可以寫出不遜於Python的簡潔語法。
鄭重聲明:文章首發於公眾號「FunTester」,禁止第三方(騰訊雲除外)轉載、發表。技術類文章精選無代碼文章精選