1. 程式人生 > >Lua中有關字串的進階操作

Lua中有關字串的進階操作

1.捕獲(capture)

捕獲功能就是根據一個模式從目標字串中抽出匹配於該模式的內容。在指定捕獲的時候,應將模式中需要捕獲的部分寫到一對圓括號中。 對於具有捕獲的模式,函式string.match會將所有捕獲到的值作為單獨的結果返回。也就是說,它會將目標字串切成多個捕獲到的部分:
pair="name = Anna"
key,valeu=string.match(pair,"(%a+)%s*=%s*(%a+)")
print(key,value)    -->name Anna

2.替換

在替換中,string.gsub的第三個引數不僅是一個字串,還可以是一個函式或table。當用一個函式來呼叫時,string.gsub會在每次找到匹配時呼叫改函式,呼叫時的引數就是捕獲到的內容,而該函式的返回值則作為要替換的字串。當用一個table來呼叫時,string.gsub會用每次捕獲到的內容作為key,在table中查詢,並將對應的value作為要替換的字串。如果table中不含這個key,則不做操作。
function expand(s)
	return (string.gsub(s,"$(%w+)",_G))
end

name="Lua" ; status="great"
print(expand("$name is $status, isn't it?"))

									-->Lua is great, isn't it?
如果不確定所有的變數都有一個對應的字串值,則可以對它們的值應用tostring。在這種情況下,可以用一個函式來提供要替換的值:
function expand(s)
	return (string.gsub(s,"$(%w+)",function(n)
		return tostring(_G[n])
		end))
end


print(expand("print=$print; a=$a"))

									-->print=function:0x8050ce0;a=nil

3.URL編碼

URL編碼是HTTP所使用的的一種編碼方式,用於在一個URL中傳送各種引數。這種編碼方式會將特殊字元(如'='、'&'、'+')編碼為“%<xx>”的形式,其中<xx>是字元的十六進位制的表示。此外它還會將空格轉換為"+"。

相關推薦

Lua有關字串操作

1.捕獲(capture) 捕獲功能就是根據一個模式從目標字串中抽出匹配於該模式的內容。在指定捕獲的時候,應將模式中需要捕獲的部分寫到一對圓括號中。 對於具有捕獲的模式,函式string.match會

Django的ORM操作

email 裏的 之間 value 保存 eight tor connector 做了 Django中是通過ORM來操作數據庫的,通過ORM可以很easy的實現與數據庫的交互。但是仍然有幾種操作是非常繞也特別容易混淆的。於是,針對這一塊,來一個分類總結吧。 對於ORM對數

Oracle有關字串操作的語法

Oracle中有關字串操作的語法   Oracle提供了豐富的字串函式      lpad()函式 lpad()函式用於左補全字串。在某些情況下,預期的字串為固定長度,而且格式統一,此時可以考慮使用lpad()函式。例如,深市股票程式碼都以0開頭,

NDK在Android操作

一、建立一個專案名字叫做JNIDemo,在專案中建立一個類名字叫做JNIDemo,我們編寫如下程式碼: public class JNIDemo { //建立一個方法名字叫做sayHello public native void sa

第10章:awk操作

模式 rpe .sh 定義變量 能夠 all 模式匹配 mon ble 第10章:awk進階操作      在第4章:查找與替換簡單的講解了awk的使用,本章介紹詳細講解awk的使用。awk是一個強大的文本分析工具,簡單的說awk就是把文件逐行的讀

第11章:sed操作

ssa str 插入 引號 ams 部分 情況 沒有 ims 第11章:sed進階操作 sed是一個很好的文件處理工具,本身是一個管道命令,主要是以行為單位進行處理,可以將數據行進行替換、刪除、新增、選取等特定工作,下面先了解一下sed的用法

【Vue實戰之路】一、Vue-cli全面詳解及操作

image 腳本 js基礎 這一 命令執行 bsp row 編譯 服務器 全面的Vue-cli學習,這一篇就夠了! 一、下載 使用vue-cli前,需先安裝node.js,node的安裝就不贅述,不過在此需要註意: 1. node版本需在4.x以上,首推6.x以上版本

Redis筆記整理(三):操作與高級部分

數據庫 NoSQL Redis [TOC] Redis筆記整理(三):進階操作與高級部分 Redis發布訂閱 Redis發布訂閱(pub/sub)是一種消息通信模式:發送者(pub)發送消息,訂閱者(sub)接收消息。 Redis客戶端可以訂閱任意數量的頻道。 下圖展示了頻道channel1,以

Git 操作(一)

topic 參考 origin hot parent ref selection 本地 vision 1. 獲取提交信息(commit) git show 1c002d(哈希值的前幾位): 獲取提交的信息; git show HEAD^: 顯示HEAD的上級(parent

CMake字串及檔案操作

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

資料庫的操作

點我跳轉到資料庫的基本操作 文章目錄 使用as給欄位起別名 使用as給表起別名 消除重複行 條件查詢 條件中加入判斷 常用的比較運算子 邏輯運算子 模糊查詢like

Python基礎(8):python的特性篇(迭代,列表生成式,生成器,迭代器)

python中還包括一些高階特性,以下簡單介紹。 迭代 定義:用for迴圈來遍歷物件的過程,叫做迭代。 作用物件:可迭代物件 如何判斷是否為可迭代物件:isinstance(xxx,Iterable),Iterable型別來源於collections模組。 應用場景: 1

Zabbix報警機制 、 Zabbix操作 、 監控案例

Top NSD SECURITY DAY06 1 案例1:實現Zabbix報警功能 1.1 問題 沿用第5天Zabbix練習,使用Zabbix實現報警功能,實現以下目標: 監控Linux伺服器系統賬戶 建立Media,設定郵件伺服器及收件人郵箱 當系統賬戶數

Python-操作redis

1、String 操作   redis中的String在在記憶體中按照一個name對應一個value來儲存 set() #在Redis中設定值,預設不存在則建立,存在則修改 r.set('name', 'zhangsan') '''引數: set(name, value,

[學習筆記]LCT操作 LCT總結——應用篇(附題單)(LCT)

LCT總結——應用篇(附題單)(LCT) 一般都是維護鏈的操作。split即可搞定。 進階操作的話,處理好輔助樹和原樹的關係即可搞定。 其實,最大的區別就是,splay隨便轉,輔助樹形態變了,但是原樹形態不變,makert會讓原樹形態變化   LCT維護子樹資訊 真兒子會splay的時候

MySQL操作

二、MySQL進階操作 為欄位或表起別名:as  寫在欄位名前,去除重複資料:distinct 條件篩選常用命令:     比較運算子 > < >= <= != <>     邏輯運算

MongoDB操作

limit 和 skip limit 限制顯示條數 db.stu.find().limit(2) skip 跳過記錄數 db.stu.find().skip(1) 【重點】如果limit和skip同時使用,先skip後limit不管先後順序 db.stu.f

Redis(三)操作

Redis進階操作 Redis事務處理 Redis本身支援事務處理,但是這種支援的事務處理本身是存在設計缺陷的,而且與傳統的關係型資料庫的事務處理有些不同,首先先來看一下Redis中的事務支援命令: 1.開啟事務:multi 2.取消事務:disca

個人筆記:linux基本操作-操作

系統版本:centos6.7 檢視IP:ifconfig 軟體資訊:java -version 安裝記錄:yum list installed |grep java 安裝rpm檔案:rpm -ivh  建立檔案:mkdir +目錄 移除:yum -y remove **

awk操作

7.1、awk命令形式          awk命令在shell指令碼基本形式通常由四部分組成: [-F|-f|-v] (引數選項)、BEGIN語句塊(初始化程式碼塊)、pattern{commadns}(能夠使用模式