Java和Groovy正則使用

2021-02-26 鈞漫元瀧

相信很多人都對正則有很深的交情,畢竟這玩意功能太強了,幾乎無處不在。我最長用的正則還是爬蟲。爬蟲分兩類,一種是接口返回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 0

Groovy語法還是有很強的可玩性的,雖然基本兼容Java語法,但是深入了解Groovy之後,是可以寫出不遜於Python的簡潔語法。

鄭重聲明:文章首發於公眾號「FunTester」,禁止第三方(騰訊雲除外)轉載、發表。技術類文章精選無代碼文章精選

相關焦點

  • Java的正則表達式和捕獲組
    (點號)也是一個正則表達式,它匹配任何一個字符如:"a" 或 "1"。^\d+(\.\d+)? ^ 定義了以什麼開始\d+ 匹配一個或多個數字? 設置括號內的選項是可選的\. 匹配 "."可以匹配的實例:"5", "1.5" 和 "2.21"。
  • Java 正則表達式教程及示例
    Java正則表達式的類在 java.util.regex 包中,包括三個類:Pattern,Matcher 和 PatternSyntaxException。Pattern對象是正則表達式的已編譯版本。他沒有任何公共構造器,我們通過傳遞一個正則表達式參數給公共靜態方法 compile 來創建一個pattern對象。
  • C++、Java、JavaScript中的正則表達式
    但不同的語言可能會有一些細小的差別,如果要針對各種程式語言,想有更精確和權威的說明,可參考官方文檔:C++(VS2013編譯器):http://msdn.microsoft.com/zh-cn/library/bb982727.aspx#grammarsummaryJava:http://docs.oracle.com/javase/7/docs/api/java/util
  • java正則表達式入坑指南
    在日常開發工作中,無論你使用的語言是java、python、shell、golang還是C#, 正則表達式是程式語言中幾乎繞不開的話題。有了它,可以幫你快速定位到符合條件的文本內容。今天小編帶大家一起來學習下正則表達式,相信通過這篇文章的介紹,能為以後的工作提供一個更清晰的思路。
  • 給JAVA程式設計師的正則表達式一課
    正則基礎正則表達式(Regex,簡稱RE)是一種根據字符串集中的每個字符串的共同特徵來描述字符串集的方法。可用於搜索,編輯或處理文本和數據。簡單來說,正則表達式是幫助我們根據特定格式驗證或匹配字符串的方式。可以類比資料庫的SQL語言,sql是搜索數據,RE是搜索字符串。正則表達式和SQL語言是開發界的兩個偉大發明。
  • IDEA + Groovy 腳本一鍵生成實體類,用法舒服,高效!
    連接好了如上圖所示,可以看到自己的資料庫和表,選擇一個表右鍵,網上教程一般到這裡結束,都是選擇說Generate POJOs.groovy,然後在彈出窗口選擇需要生成的文件夾所在即可。沒想到最後也不難,下面就是實現:右鍵選擇表,在選擇Generate POJOs.groovy 的下面那一項:
  • Apache Groovy 2.4.6 發布 - OSCHINA - 中文開源技術交流社區
    ExpandoMetaClass.enableGlobally()[GROOVY-3341] - MissingMethodException in Builder is misleading[GROOVY-4698] - Possible memory leak in Tomcat[GROOVY-4888] - groovy
  • 使用Gradle編譯Java工程之自定義Plugins篇
    我們可以自定義實現自己的Gradle插件,然後分享給其他人使用。我們可以使用不同的語言來實現,不過本章中作者選擇使用Groovy來實現的,大家也可以使用像java、scala等喜歡的別的語言來實現。Gradle自定義插件的實現和自定義任務類型非常的相似,而它兩一般都是結合使用的。
  • 在Java 中安全使用接口引用
    為了驗證這個假設,我們分別用kotlinc 和groovyc 將之前的代碼編譯成class 文件,然後再使用javap 指令進行反彙編。編譯/反編譯`GroovySample.groovy` 1 2 3 4Compiled from "GroovySample.groovy" 5public class GroovySample implements groovy.lang.GroovyObject { 6 7  public void register(GroovySample
  • 8分鐘看完,徹底掌握Java正則表達式的十大問題!
    這篇文章總結了有關Java正則表達式的主要問題。希望可以給同學們帶來java學習路上的成長!1.如何從字符串中提取數字?使用正則表達式的一個常見問題是將所有數字提取到整數數組中。compile()用於將正則表達式轉換為有限狀態機(請參見《編譯器:原理,技巧和工具》(第二版))。但是執行比賽所涉及的所有狀態都位於比賽者中。通過這種方式,模式p可以被重用。而且許多匹配器可以共享相同的模式。模式。
  • JAVA學習之路(總結)--基礎篇二
    由於字符串對象在常見開發時廣泛使用,會出現頻繁創建該字符串的情況。java為此做了一個優化措施。使得string對象為不可變對象。String常量池。二:基本正則表達式(重點+難點):java裡的正則表達式用的非常的廣泛,到後期學習js經常會用到正則表達式簡介
  • 認識正則表達式(Java語言基礎)
    當然是可以的輸出格式: 2006-4-16輸出格式: 2006年4月16日 星期六這上面的就是用數字表示規則的,下面就是用字符串表示規則的輸出格式: 2006-01-01 00:00:00輸出格式: 2006-01-01我們就可以認為這是一個正則做一個小例子,檢驗QQ號我們先不用正則去檢驗
  • JVM-概述和內存區域
    "hello groovy...";   }}3、將其編譯成class文件groovyc HelloWorld.groovy4、用java命令運行groovy編譯出來的HelloWorld.class文件(註:全局搜索groovy-all-xxxx.jar的jar包,將其路徑作為classpath後的參數)
  • 乾貨:java正則表達式匯總
    Email 正則表達式模式  ^[_A-Za-z0-9-]+(\\.[_A-Za-z0-9-]+)*@[A-Za-z0-9]+(\\.[A-Za-z0-9]+)*(\\.和中括號內的字符[],必須包含一個或者多個(+)  )* # 組#2結束,這個組是可選的(*)  ( # 組#3開始 – 二級TLD檢查  \\.[A-Za-z]{2,} # 接下來是一個點"."和中括號內的字符[], 最小長度為2  ) # 組#3結束  $ # 行結束  5.
  • Gradle 創建java項目詳細步驟
    Gradle 用build.gradle文件, 可讀性更強, 使用更方便, 可謂如日中天.來自百科解讀:Gradle是一個基於Apache Ant和Apache Maven概念項目自動化構建開源工具。它使用基於Groovy的特定領域語言(DSL)來聲明項目設置,拋棄了基於XML的各種繁瑣配置。
  • 正則表達式在VBA中間是如何應用?正則表達式的實現方式?
    在繼續學習正則元字符特性或編制自己的正則表達式時,常常需要對其測試.也可以自己編制VBA代碼進行測試,這樣做的好處是可以提高在今後實際工作應用正則表達式的能力。所以,先介紹正則與VBA的交互的相關知識,讓你在VBA中間使用正則表達式遊刃有餘。當然你也可以快速閱讀或直接越過本章內容,在你以後的實際具體工作應用時,直接查閱即可。
  • JMeter關聯:JMeter正則表達式提取器與JSON提取器
    Token是服務端生成的一串字符串,以作客戶端進行請求的一個令牌,當第一次登錄後,伺服器生成一個Token便將此Token返回給客戶端,以後客戶端只需帶上這個Token前來請求數據即可,無需再次帶上用戶名和密碼。要想實現這個場景,我們需要這麼做:在登錄接口響應結果中將token提取出來並保存在變量中,這裡可以使用【正則表達式提取器】和【JSON提取器】。
  • 正則表達式必須掌握的三個知識點,你知道多少?
    \w+)*/」這是一個匹配郵箱的正則表達式。上面是一個簡單的正則表達式,它按照正則表達式語法規則構建的,由普通字符和特殊功能的字符組成的字符串,這些模式字符串放在特定的正則表達式函數中使用才能有效果。正則表達式作用如果是第一次接觸正則表達式,會感覺到它很繁瑣,有種難以捉摸的感覺。正則表達式描述字符排列模式的一種自定義語法規則,在PHP中使用這種模式對字符串進行匹配、查找、替換及分割的操作,它的使用很廣。
  • 新手上路:圖文解讀助你理解和使用正則表達式
    選自janmeppe.com作者:Jan Meppe機器之心編譯參與:韓放、杜偉這篇博客是關於正則表達式(regex)的插圖指南,旨在為那些從來沒有使用過正則表達式,想嘗試但又望而生畏的新手提供一個簡單介紹。
  • 蔡徐坤與GroovyRoom合作 網友:超期待!
    groovypark微博截圖  7月6日消息,韓國頂尖製作人groovypark在社交帳號上更新了與蔡徐坤的合照,並配文「GroovyRoom×CaiXuKun!」  合照  據悉,GroovyRoom是韓國知名製作人組合,其中有兩位成員,一位是groovypark(蔡徐坤右側),另一位中文名李輝珉(蔡徐坤左側),要知道GroovyRoom的實力非常強悍,2017年,GroovyRoom