根据文档,所有Lua重复运算符仅适用于单个字符,因此您可以匹配
string.match('123', '1?(%d+)') -- returns 23
Run Code Online (Sandbox Code Playgroud)
但无法匹配多字符字符串:
string.match('123', '(12)?(%d+)') -- want this to return 3
Run Code Online (Sandbox Code Playgroud)
文档说这可能通过"多种模式和自定义逻辑",但我不知道这意味着什么.有人能提供一种模式匹配的方法吗?基本上,12应该可选地匹配all-or-nothing,并返回数字字符串的其余部分.
我需要four.five从one.two.three.four.fiveLua 字符串变量中的URL ( ) 中提取域 ( ) 。
我似乎无法在 Lua 中找到执行此操作的函数。
编辑:
当 URL 到达我时,这些http东西已经被剥离了。所以,一些例子是:
a) safebrowsing.google.com
b) i2.cdn.turner.com
c) powerdns.13854.n7.nabble.com
Run Code Online (Sandbox Code Playgroud)
所以我的结果应该是:
a) google.com
b) turner.com
c) nabble.com
Run Code Online (Sandbox Code Playgroud) 有没有办法我可以做一个匹配的字符串模式,"ab|cd"因此它匹配任何一个"ab"或"cd"在输入字符串中.我知道你使用的东西就像"[ab]"一个模式,它将匹配任何一个"a"或"b",但这只适用于一个字母的东西.
请注意,我的实际问题要复杂得多,但基本上我只需要知道Lua的字符串操作中是否存在OR函数.我真的希望把的或东西,等各个侧面等图案但是,如果它与类似"hello|world"和匹配"hello, world!"与双方"hello"和"world"则这是伟大的!
我正在用 Lua 编程,到目前为止我已经有了这个。
S=tostring(M[i].AllSegmentsList) --it returns "MSH, PID"
for i in string.gmatch(S, ",") do --I have ", " as delimiter
t= {} --Now, I want the values returned by delimiter to be added into an array.
end
Run Code Online (Sandbox Code Playgroud)
我怎样才能做到这一点。
我正在重新命名具有不需要的字母的电影标题.在string.gsub可以替换"的字符串"零值,但我有需要与内容替换大约200字符串模式"".
现在我必须string.gsub为每个模式.我在想是否有办法将所有字符串模式放入单行string.gsub.我在网上搜索了解决方案,但仍然没有得到任何东西.
电影标题是这样的B.A.Pass 2013 Hindi 720p DvDRip CROPPED AAC x264 RickyKT
,我想删除喜欢多余的字符2013,Hindi,720p,DvDRip,CROPPED,AAC,x264,RickyKT.
我正在尝试使用简单的模式匹配解析 Lua 中的化学公式。但是,我不知道如何将捕获组指定为可选。这是我想出的模式:
pattern = "(%u%l*)(%d*)"
Run Code Online (Sandbox Code Playgroud)
第一组捕获原子符号(即“H”、“He”等),第二组捕获分子中该原子的编号。这个值通常是一个整数值,但如果是1,则经常被省略,例如:
formula = "C2H6O"
Run Code Online (Sandbox Code Playgroud)
当我尝试进行全局匹配时,如果没有匹配,结果count是''而不是我预期的nil.
compound = {}
for atom,count in string.gmatch(formula, pattern) do
compound[atom] = count or 1
end
Run Code Online (Sandbox Code Playgroud)
显然我可以检查一下,count = ''但我很好奇 Lua 中是否有一个可选的捕获组。
我想替换$br$字符串中的所有短语'\n'.
我写下面的代码:str = string.gsub("String 1 $br$ String 2", "$br$", "\n").
但这不起作用并显示字符串String 1 $br$ String 2.我究竟做错了什么?
我正在寻找Lua模式设置中重复符号的数量.我尝试检查字符串中的符号数量.正如我在手册中所读到的,即使使用字符类,这仍然是非常有限的,因为我们只能匹配具有固定长度的字符串.
为了解决这个问题,模式支持这四个重复运算符:
- '*'尽可能多地匹配前一个字符(或类)零次或多次.
- '+'尽可能多次匹配前一个字符(或类)一次或多次.
- ' - '将前一个字符(或类)与零或多次匹配,尽可能少.
- '?' 使前一个字符(或类)可选.
所以,没有关于大括号的信息,{}
例如,
{1,10}; {1,}; {10};
Run Code Online (Sandbox Code Playgroud)
不起作用.
local np = '1'
local a = np:match('^[a-zA-Z0-9_]{1}$' )
Run Code Online (Sandbox Code Playgroud)
回报np = nil.
local np = '1{1}'
local a = np:match('^[a-zA-Z0-9_]{1}$' )
Run Code Online (Sandbox Code Playgroud)
返回np = '1{1}':)
这个网址说没有这样的魔术符号:
某些字符(称为魔术字符)在模式中使用时具有特殊含义.神奇的人物是
Run Code Online (Sandbox Code Playgroud)( ) . % + - * ? [ ^ $
卷曲括号仅作为简单文本工作,不再有效.我对吗?避免这个'错误'的最佳方法是什么?
例如,这里可以阅读大括号的常用用法.
我正在尝试string.gmatch从参考手册中学习Lua 5.3中的模式(在等等中实现)是如何工作的.
(感谢@greatwolf使用*来纠正我对模式项的解释.)
我正在试图做的是要匹配'(%(.*%))*'(子通过封闭(和) ;例如,'(grouped (etc))'),这样它会记录
(分组(等))
(等)
要么
分组(等)
等
但它没有做任何事情(在线编译器).
local test = '(grouped (etc))'
for sub in test:gmatch '(%(.*%))*' do
print(sub)
end
Run Code Online (Sandbox Code Playgroud) 众所周知,以递归方式(而不是NFA/DFA)实现的正则表达式在某些情况下可能需要指数运行时间.Lua模式是通过递归匹配器实现的(它们允许回溯),但它们的功能不如正则表达式(忘记%b模式).
Lua模式是否需要指数运行时间?并且没有回溯(任何出现的%0,%1,%2 ...模式)?如果是这样,我会欣赏一些例子.