【JS逆向基礎】數據分析之正則表達式

前言:前面介紹了關于JS逆向所需的基本知識,比如前端三件套等,從這里開始就要進入到數據分析的范圍內了,當然對于一些小白而言一些基本的知識還是需要知道的,比如正則,XPATNY與BS4;三個內容用三篇博文來詳細介紹一下,與JS開發者共同學習與突破,本篇文章先介紹一下正則表達式。


正則表達式

Regular Expression,譯作正則表達式或正規表示法,表示有規則的表達式,意思是說,描述一段文本排列規則的表達式。正則表達式并不是Python的一部分。而是一套獨立于編程語言,用于處理復雜文本信息的強大的高級文本操作工具。正則表達式擁有自己獨特的規則語法以及一個獨立的正則處理引擎,我們根據正則語法編寫好規則(模式)以后,引擎不僅能夠根據規則進行模糊文本查找,還可以進行模糊分割,替換等復雜的文本操作,能讓開發者隨心所欲地處理文本信息。正則引擎一般由編程語言提供操作,像python就提供了re模塊或regex模塊來調用正則處理引擎。

正則表達式在處理文本的效率上不如系統自帶的字符串操作,但功能卻比系統自帶的要強大許多

最早的正則表達式來源于Per語言,后面其他的編程語言在提供正則表達式操作時基本沿用了Per語言的正則語法,所以我們學習python的正則以后,也可以在java,php,go,javascript,sql等編程語言中使用。

正則對字符串或文本的操作,無非是分割、匹配、查找和替換。

在線測試工具 正則表達式在線測試 - 站長工具

import res = "tools_chaina|||12213132_astrust"ret = re.findall("[a-z]+",s)    #其中第一個參數是元字符 共有大概十幾個
print(ret)

1,元字符

元字符是具有特殊含義的字符

下面是一些元字符的使用的方法與代碼實例?

import re"""re.findall(正則模式,文本)基于正則模式查找所有匹配的文本內容"""
#part1:通配符->. 字符集->[]
ret1 = re.findall("a","a,b,c,d,e,a")    #
ret2 = re.findall(".","a,b,e,d,e")      #通配符ret3 = re.findall("[ace]","a,b,c,d,e")  #字符集  其中任何一個字符符合要求就可以ret4 = re.findall("[a-z]","a,b,c,d,e")  #a~z的所有字符都匹配出來 合成一個列表ret5 = re.findall("[0-9]","1,2,3,4,5")  #0~9的所有字符ret6 = re.findall("\d","1,2,3,4,5,q,d,q")     #匹配所有的數字符號ret61 = re.findall("\w","1,2,3,4,5,q,w,d,w,A,S,D")  #匹配所有的數字加上字母符號ret7 = re.findall("[0-9a-z]","1,a,2,b,3")ret71 = re.findall("[A-Za-z]","1,a,2,b,3,A,A,S,D,E,F")ret8 = re.findall("[^a-z]","1,a,2,b,3")    #匹配一個沒有在中括號出現的任何原子ret9 = re.findall("[^-9,]","1,a,2,b,3")print("ret1:",ret1)print("ret2:",ret2)print("ret3:",ret3)print("ret4:",ret4)print("ret5:",ret5)print("ret6:",ret6)print("ret61:",ret61)print("ret7",ret7)print("ret71:",ret71)print("ret8:",ret8)print("ret9:",ret9)#part2: + 0~多次   * 1~多次  ? [0,1]  {} [m,n]   重復ret2 = re.findall("\d+","a,b,234,d,6,888")      #默認貪婪匹配ret3 = re.findall("\d+?","a,b,234,d,6,888")     #取消貪婪匹配ret4 = re.findall("\d*","a,b,234,d,6,888")ret5 = re.findall("\w+","a,b,234,d,hiydcwhvc,qigeqc")ret6 = re.findall("\w*","a,b,234,d,hiydcwhvc,qigeqc")ret7 = re.findall("123*","a,b,12,d,hiydcwhvc,qigeqc,123")ret8 = re.findall("\w{2,9}","a,b,234,d,hiydcwhvc,qigeqc")ret9 = re.findall("123?","a,b,12,d,hiydcwhvc,qigeqc,123")print(ret9)#part2:位置元字符  ^ 開頭  $ 結尾ret3 = re.findall("^\d+","34,banana,255,orange,65536")  #查找第一個數字字符串 沒有就返回空ret4 = re.findall("^\w+","peach,34,banana,255,orange,65536")ret5 = re.findall("\w+$","peach,34,banana,255,orange,65536") #最后一個數字或者字母的字符串print(ret5)# part4:
# | 指定原子或正則模式進行二選一或多選一
# () 具備模式捕獲的能力,也就是優先提取數據的能力,(?:)可以取消模式捕獲ret1 = re.findall(",\w{5},",",apple,banana,peach,orange,melon,")  #提取的內容中間包含有兩個逗號ret2 = re.findall(",(\w{5}),",",apple,banana,peach,orange,melon,") #只提取括號中的內容ret3 = re.findall("\w+@\w+\.com","123abc@163.com,....234xyz@qq.com")ret4 = re.findall("(?:\w+)@163\.com","123abe@163.com234xy20gco")
ret5 = re.findall("\w+@(?:qq|163)\.com","123abc@163.com,....234x")print(ret4)#part5: 轉義符 \d \D \w \W \n \s \b \B
#(1)將普通符號轉移成特殊符號
#(2)將特殊符號轉換成普通符號
"""\b 1個單詞邊界原子"""
txt ="my name is nana. nihao,nana"
ret = re.findall(r"na",txt)
ret1 = re.findall(r"\bna", txt)   
print(ret)

#正則表達式的進階
text ="<12> <xyz> <!@#$%> <1a!#e2> <>"
ret1 = re.findall("<\d+>",text)
ret2 = re.findall("<\w+>",text)
ret3 = re.findall("<.t>",text)
ret4 = re.findall("<.+?>",text) #增加一個問號就可以將上面的分割取出
ret5 = re.findall("<.*?>",text) #增加一個問號就可以將上面的分割取出
print(ret4)

2,正則表達式的常用接口

2.1 split

def split(patter,string,maxsplit=0,flags=0)
split()  #函數返回一個列表,對字符串進行正則分割。
import re
txt:="my name is moluo"
ret = re.split("\s",txt)
print(ret)   # 'my', 'name', 'is', 'moluo'
# 可以通過指定 maxsplit 參數來控制分割的次數,例如,僅在第1次出現時才拆分字符串:
import re
txt= "mYname is yuan"
ret = re.split("\s+", txt)
print(ret)

2.2 sub和subn

def sub(pattern,repl,string,count=0,flags=0) 返回匹配后的結果

def subn(pattern,repl,string,count=0,flags=0) 返回匹配后的結果和次數

# sub()函數用選擇的文本替換匹配:
# 找到第一個空白字符并進行替換
import re
txt ="myname is yuan"
ret = re.sub(r"\s+","lei",txt,1)
print(ret)

2.3 search

 ret = re.search(r"(?P<tel>1[3-9]\d{9}).*?(?P<email>\d+@qq\.com)","我的手機號碼是13928835900,我的QQ號碼是232324@qq.com")print(ret.group("tel"))print(ret.group("email"))

2.4 match

#(3)match     #查找的字符串必須在開頭才可以查到
ret = re.match(r"^1[3-9]\d{9}","13928835900,我的QQ號碼是232324@qq.com")
print(ret)

2.5 complie

1. 預編譯正則表達式模式

re.compile 允許你將一個正則表達式字符串編譯成一個正則表達式模式對象(Pattern object)。這樣做的好處是,如果你需要多次使用同一個正則表達式模式進行匹配,編譯一次后再多次使用可以提高效率。

2. 提高匹配效率

當你需要頻繁使用同一個正則表達式進行匹配時,預編譯可以顯著提高性能。這是因為每次使用正則表達式時,Python 都需要先解析字符串,然后進行匹配。通過預編譯,可以避免重復解析字符串,從而加快匹配速度

#(6)compile 編譯
s1="12 apple 34 peach 77 banana"
ret = re.findall(r"\d+",s1)
print(ret)
s2="22 apple 33 peach 44 banana"
ret = re.findall(r"\d+",s2)
print(ret)reg = re.compile(r"\d+")
print(reg.findall(s1))

未完待續。。。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/913712.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/913712.shtml
英文地址,請注明出處:http://en.pswp.cn/news/913712.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Mac mini 高性價比擴容 + Crossover 游戲實測 全流程手冊

Mac mini 高性價比擴容 Crossover 游戲實測 全流程手冊 本文將圖文并茂地指導你如何&#xff1a; 為 M4 Mac mini 外置擴容&#xff08;綠聯 USB4 硬盤盒 致態 TiPlus7100&#xff09;安裝并配置 Crossover/Whisky 運行 Windows 應用實測游戲運行性能、診斷常見異常一、準備工…

【PyTorch】PyTorch中torch.nn模塊的卷積層

PyTorch深度學習總結 第七章 PyTorch中torch.nn模塊的卷積層 文章目錄PyTorch深度學習總結前言一、torch.nn模塊1. 模塊的基本組成部分1.1 層&#xff08;Layers&#xff09;1.2 損失函數&#xff08;Loss Functions&#xff09;1.3 激活函數&#xff08;Activation Functions…

Rust簡潔控制流:if let與let else高效編程指南

文章目錄Rust簡潔控制流&#xff1a;if let與let else高效編程指南&#x1f3af; if let&#xff1a;專注單一匹配場景&#x1f4a1; if let核心優勢&#xff1a;&#x1f504; if let與else搭配使用&#x1f680; let else&#xff1a;錯誤處理與提前返回&#x1f48e; let el…

upload-labs靶場通關詳解:第19關 條件競爭(二)

一、分析源代碼//index.php // 初始化變量&#xff1a;標記上傳狀態和錯誤消息 $is_upload false; $msg null;// 檢查是否通過POST方式提交了表單 if (isset($_POST[submit])) {// 引入自定義上傳類require_once("./myupload.php");// 生成基于時間戳的文件名&…

一天兩道力扣(3)

解法一&#xff1a;class Solution(object):def invertTree(self, root):if not root:return Noneroot.left, root.right root.right, root.leftself.invertTree(root.right)self.invertTree(root.left)return root解析&#xff1a;遞歸解法二&#xff1a;class Solution(obje…

jenkins2025安裝、插件、郵箱發送使用

Tips&#xff1a;卸載從新安裝(需要在C盤線先刪除.jenkins文件)&#xff0c;然后換個默認瀏覽器從新安裝推薦的插件(不然安裝插件這一步會報錯&#xff0c;連接不到jenkins) 一、jenkins安裝 訪問jenkins官網&#xff1a;https://www.jenkins.io/download/ 雙擊war包開始下載…

vue中通過tabs 切換 時 顯示不同的echarts 特殊處理

需要進行特殊處理 比如強制 進行resize 的方法 不然 大小顯示會出現問題我先把全部的代碼弄上<script setup lang"ts"> import { ref, onMounted, onBeforeUnmount, nextTick } from vue import { useRoute } from vue-router import { message } from ant-des…

淺度解讀-(未完成版)淺層神經網絡-深層神經網絡

文章目錄淺層神經網絡的前向傳播計算流程矩陣在運算時形狀的變化激活函數的作用為什么要有激活函數反向傳播深層神經網絡參數超參數參數初始化初始化權重的值選擇淺層神經網絡的前向傳播 計算流程 #mermaid-svg-tMPs4IUCtqxvhJ24 {font-family:"trebuchet ms",verda…

【vben3源碼解讀】【useEcharts】【VueUse】詳解useEcharts這個hooks的作用與相關庫的使用(VueUse)

源代碼 import type { EChartsOption } from echarts;import type { Ref } from vue;import type { Nullable } from vben/types;import type EchartsUI from ./echarts-ui.vue;import { computed, nextTick, watch } from vue;import { usePreferences } from vben/preference…

報錯 400 和405解決方案

今天出了好多這個錯誤&#xff0c;Uncaught (in promise) AxiosError {message: Request failed with status code 400 , name: AxiosError , code: ERR_BAD_REQUEST , config: {…}, request: XMLHttpRequest, …}反正就是前后端的參數不匹配&#xff0c;要不就是請求方式不…

Java源碼的前端編譯

Java源碼的前端編譯 歡迎來到我的博客&#xff1a;TWind的博客 我的CSDN:&#xff1a;Thanwind-CSDN博客 我的掘金&#xff1a;Thanwinde 的個人主頁 0.前言 當一份Java代碼寫好時&#xff0c;將其進行編譯&#xff0c;運行&#xff0c;并不是簡單把這個Java源碼從頭到尾執行…

JWT6報錯誤 kid empty unable to lookup correct key

JWT5和jwt6在加密和解密和時候還明些區別的 &#xff0c;在5中&#xff0c;是不需要這個kid的&#xff0c;加解都不需要。但6中是需要這個keyId。 所以在使用的時候要做個區別&#xff0c;參考下面鏈接&#xff1a; ThinkPhp5.0.24 JWT報錯 ‘“kid“ empty, unable to lookup…

高效學習之一篇搞定分布式管理系統Git !

一、Git是什么1&#xff0e;Git是目前世界上最先進的分布式版本管理系統 2&#xff0e;工作原理/流程workspace&#xff1a;工作區 Index/Stage&#xff1a;暫存區 Repository&#xff1a;倉庫區&#xff08;本地倉庫&#xff09; Remote&#xff1a;遠程倉庫二、SVN和Git的最主…

AdsPower API 新增查詢環境 Cookies 接口,自動化更進一步!

你是不是有過這樣的經歷&#xff1f;賬號在 AdsPower 環境中已經成功登錄&#xff0c;但你還要花時間手動導出 Cookies、再整理處理&#xff0c;過程繁瑣、效率低下。 現在&#xff0c;我們上線了 API 查詢環境 Cookies 的接口&#xff0c;支持通過 API 直接獲取已登錄環境的 …

Craftium游戲引擎中的客戶端同步機制解析

Craftium游戲引擎中的客戶端同步機制解析 craftium A framework for creating rich, 3D, Minecraft-like single and multi-agent environments for AI research based on Minetest 項目地址: https://gitcode.com/gh_mirrors/cr/craftium 游戲狀態同步的核心問題 在分…

spring cloud負載均衡之FeignBlockingLoadBalancerClient、BlockingLoadBalancerClient

本文主要分析被 FeignClient 注解的接口類請求過程中負載均衡邏輯&#xff0c;流程分析使用的源碼版本信息如下&#xff1a;<spring-boot.version>3.2.1</spring-boot.version><spring-cloud.version>2023.0.0</spring-cloud.version>背景 平常我們代碼…

提示工程(Prompt Engineering)研究進展

提示工程(Prompt Engineering)研究進展 以及它如何幫助大語言模型(LLMs)和視覺語言模型(VLMs)更好地工作。用簡單的話說,就是通過設計巧妙的“提示”(比如指令、例子),讓模型在不修改內部參數的情況下,更精準地完成各種任務,比如回答問題、推理、生成內容等。 文檔…

【ARM】AI開發板A7處理器JTAG實現指南

一、文檔背景盡管開發板原廠提供了相關文檔&#xff0c;但可能缺乏對 A7 處理器 JTAG 功能的詳細說明。這可能會導致以下問題&#xff1a;開發人員難以理解和利用 A7 處理器的基本功能&#xff0c;阻礙調試和開發進度。在進行Uboot移植過程中&#xff0c;無法應用圖形界面的調試…

FPGA(一)Quartus II 13.1及modelsim與modelsim-altera安裝教程及可能遇到的相關問題

零.前言 在學習FPGA課程時&#xff0c;感覺學校機房電腦用起來不是很方便&#xff0c;想著在自己電腦上下載一個Quartus II 來進行 基于 vhdl 語言的FPGA開發。原以為是一件很簡單的事情&#xff0c;沒想到搜了全網文章發現幾乎沒有一個完整且詳細的流程教學安裝&#xff08;也…

軟考(軟件設計師)存儲管理—存儲空間管理,文件共享保護

一、文件存取方法 1. 順序存取&#xff08;Sequential Access&#xff09; 原理&#xff1a;按記錄寫入順序依次訪問特點&#xff1a; 讀操作&#xff1a;讀取當前位置&#xff0c;指針自動前移寫操作&#xff1a;追加到文件末尾 適用場景&#xff1a;磁帶設備、日志文件 #merm…