标签: lua-patterns

Lua:除非引用,否则将字符串拆分为单词

所以我有以下代码在空格之间拆分字符串:

text = "I am 'the text'"
for string in text:gmatch("%S+") do
    print(string)
end
Run Code Online (Sandbox Code Playgroud)

结果:

I
am
'the
text'
Run Code Online (Sandbox Code Playgroud)

但我需要这样做:

I
am
the text --[[yep, without the quotes]]
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点?

编辑:只是为了补充问题,我们的想法是将参数从程序传递到另一个程序.这是我正在工作的拉取请求,目前正在审核中:https://github.com/mpv-player/mpv/pull/1619

string lua lua-patterns

6
推荐指数
1
解决办法
1343
查看次数

Lua:模式匹配多个字符与?重复算子

根据文档,所有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,并返回数字字符串的其余部分.

regex lua lua-patterns

5
推荐指数
1
解决办法
771
查看次数

如何从 URL 中提取域

我需要four.fiveone.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)

string dns lua lua-patterns

5
推荐指数
2
解决办法
4286
查看次数

有没有模式的Lua string.find

我应用了一个函数,但看起来很糟糕.

function find_without_pattern(s1,s2)
    for i =1,#s1-#s2+1 do
        local t = string.sub(s1,i,#s2+i-1)
        if t == s2 then
            return i,i+#s2-1
        end
    end
end
Run Code Online (Sandbox Code Playgroud)

string lua lua-patterns

5
推荐指数
1
解决办法
1481
查看次数

Lua字符串操作模式匹配替代"|"

有没有办法我可以做一个匹配的字符串模式,"ab|cd"因此它匹配任何一个"ab""cd"在输入字符串中.我知道你使用的东西就像"[ab]"一个模式,它将匹配任何一个"a""b",但这只适用于一个字母的东西.

请注意,我的实际问题要复杂得多,但基本上我只需要知道Lua的字符串操作中是否存在OR函数.我真的希望把的或东西,等各个侧面等图案但是,如果它与类似"hello|world"和匹配"hello, world!"与双方"hello""world"则这是伟大的!

string lua parsing lua-patterns

5
推荐指数
2
解决办法
718
查看次数

在 Lua 中从 gmatch 返回的列表创建数组

我正在用 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)

我怎样才能做到这一点。

arrays string lua lua-patterns lua-table

5
推荐指数
1
解决办法
4002
查看次数

使用 Lua 模式匹配的可选组捕获

我正在尝试使用简单的模式匹配解析 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 中是否有一个可选的捕获组。

lua lua-patterns

5
推荐指数
1
解决办法
6578
查看次数

在Lua的gsub.无法替换模式

我想替换$br$字符串中的所有短语'\n'.

我写下面的代码:str = string.gsub("String 1 $br$ String 2", "$br$", "\n").

但这不起作用并显示字符串String 1 $br$ String 2.我究竟做错了什么?

lua lua-patterns

5
推荐指数
1
解决办法
210
查看次数

Lua模式设置中符号的重复量

我正在寻找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)

卷曲括号仅作为简单文本工作,不再有效.我对吗?避免这个'错误'的最佳方法是什么?

例如,这里可以阅读大括号的常用用法.

lua lua-patterns

5
推荐指数
1
解决办法
1848
查看次数

模式不匹配*(%(*.%))

我正在尝试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)

lua lua-patterns

5
推荐指数
1
解决办法
456
查看次数

标签 统计

lua ×10

lua-patterns ×10

string ×5

arrays ×1

dns ×1

lua-table ×1

parsing ×1

regex ×1