lua的模式匹配

摘要:
可选的捕获机制允许模式字符串的一部分与目标字符串的一个部分匹配。Localhost='wyc。com'localaa,bb=host:match--aa:wyc--bb:string comlua Find的库将查找目标模板在给定字符串中的位置,查找返回的开始和结束位置,如果未找到则返回nil。一串gmatch函数返回一个迭代器,该迭代器迭代给定字符串中出现的所有匹配字符串。一串gsub的参数可以是字符串。事实上,它也可以是函数或表。如果它是一个函数,它将调用该函数,并将捕获的内容作为参数,将返回的内容作为替换字符串。

模式:

  • 字符类:(character classes)
. all characters
%a letters
%c control characters
%d digits
%l lower -case letters
%p punctuation characters
%s space characters
%u upper-case letters
%w alphanumeric characters
%x hexadecimal digits
%z the character whose representation is 0
  • 他们的大写版本是他本身的互补。

魔法字符:

( ) . % + - * ? [ ] ^ $
  • 用%进行转义。'%%'代表'%'

字符集(char -set ):使用字符集可以自定义字符类。

1.不同的字符类,和单字符之间用[]
[%w_]匹配字母数字字符和下划线。
[01]匹配二进制数
2.要想字符集内包含字符区间,起止之间加上-
[0-9] 相当于 %d
[0-9a-fA-F]相当于 %x
3.如果想得到该字符集的互补,前面加上^
[^0-7] 任何非八进制数字

重复或可选修饰符

+ 1 or more repetitions,匹配最长的,
* 0 or more repetitions  最长的
- also 0 or more repetitions 最短的
? optional (0 or 1 occurrence) 

捕获

捕获机制允许一个模式串中的一部分来匹配目标串种的一部分。写法是模式串中你需要捕获的那部分用()括起来,例如:
我们也可以将捕获用于模式串自身,"(["'])(.-)%1",这里的%1表示匹配第一个捕获的一份拷贝。

local host = 'wyc.com'
local aa,bb = host:match("([^%.]+)%.([^%.]+)")

-- aa:wyc
-- bb:  com

lua的string库

string.find将查找目标模板在给定字符串中出现的位置,找到返回起始和结束位置,没找到返回nil。
string.match()返回匹配到的字符。
string.gmatch函数将返回一个迭代器,用于迭代所有出现在给定字符串中的匹配字符串。
string.gsub的参数可以是string,其实,也可以是个函数,或是table,如果是函数,就会用捕获的内容作为参数调用该函数,将返回的内容作为替换字符串。如果是table,则用捕获的内容为key去取table的值来作为替换字符串,如果不存在,就不做替换。

c参考于这个 http://blog.csdn.net/booirror/article/details/39831869

免责声明:文章转载自《lua的模式匹配》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇解决ubuntu中JDK的Picked up JAVA_TOOL_OPTIONS提示问题。debug下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

c# 实现网页上用户自动登陆|asp.net 模拟网站登录

using System;using System.Collections.Generic;using System.Text;using System.Net;using System.IO; namespace Czt.Web{ /// <summary> /// 实现网站登录类 /// </summary> public cl...

OAuth2.0协议专区-Springcloud集成springsecurity oauth2实现服务统一认证,应该时最简单的教程了~

1.配置认证服务器(1) 首先配置springsecurity,其实他底层是很多filter组成,顺序是请求先到他这里进行校验,然后在到oauth /** * @author: gaoyang * @Description: 身份认证拦截 */ @Order(1) @Configuration //注解权限拦截 @EnableGloba...

java代码POST方式请求SOAP

1 package com.http.soap; 2 3 import java.io.BufferedReader; 4 import java.io.IOException; 5 import java.io.InputStreamReader; 6 import java.nio.charset.Charset; 7 8 impo...

利用C#的反射机制动态调用DLL类库

最近由于业务要求,需要动态调用DLL类库,所以研究了一下,感觉还好也不太难,今天就把自己理解的写了一个小例子(已经通过VS2005跑通),供大家一起研究和探讨,有理解不当的地方还请高手们多多指正,谢谢啦! 好,在这之前我先把反射所需要使用的几个类给大家列一下: 1、使用Assembly类定义和加载程序集,加载在程序集清单中列出模块,以及从此程序集中查找类型...

聊聊OkHttp实现WebSocket细节,包括鉴权和长连接保活及其原理!

一、序 OkHttp 应该算是 Android 中使用最广泛的网络库了,我们通常会利用它来实现 HTTP 请求,但是实际上它还可以支持 WebSocket,并且使用起来还非常的便捷。 那本文就来聊聊,利用 OkHttp 实现 WebSocket 的一些细节,包括对 WebSocket 的介绍,以及在传输前如何做到鉴权、长连接保活及其原理。 二、WebSo...

cjson库的使用以及源码阅读

cjson是一个用c语言开发的json解析库,免费开源只有一个c文件和一个h文件。json和xml功能相似,可以用来传输数据,存储数据以及表达程序当前的状态。 1、下载cjson的源码         https://github.com/DaveGamble/cJSON 2、阅读readme文件可以大概的了解一下cjson的介绍以及使用方法,我尝试着把...