Lua模式匹配4位数字跟随"会议10 - "

时间:2015-11-26 21:01:25

标签: lua lua-patterns

我有一些字符串数据需要搜索才能找到具体的数字:

这是一个示例字符串/缓冲区:

Conference 11-2222-a.b.c (1 member rate: 32000 flags: running|answered|enforce_min|dynamic|exit_sound|enter_sound) 176;014802813@mydomain;0182e4e4-193b-4d63-9bef-b597f0655c83;jdo ;014802813;hear|speak|talking|floor;0;0;0;0

Conference 10-1234.c.fdf.c (1 member rate: 32000 flags: running|answered|enforce_min|dynamic|exit_sound|enter_sound)175;.net/4122@mydomain;77c1f301-85e1-4275-9c539e5927b87d6;4122;hear|speak|talking|floor;0;0;0;0

我需要做的是搜索此输出和后面的4位数字"会议10 - "。在这种情况下,我之后是1234。

**我尝试了什么**

我已经尝试了以下所有模式......没有一个能够满足我的需求:

  print(string.match(input, "10-%d%d%d%d-"));
  print(string.match(input, "Conference 10-%d%d%d%d-"));
  print(string.match(input, "Conference 10-(%d)-");
  print(string.match(input, "Conference 10(\-)(%d));

2 个答案:

答案 0 :(得分:1)

您需要使用%转义连字符,因为未转义-是Lua中的延迟量词 -也是0或更多次重复< / em>的)。

str = "Conference 11-2222-a.b.c (1 member rate: 32000 flags: running|answered|enforce_min|dynamic|exit_sound|enter_sound) 176;014802813@mydomain;0182e4e4-193b-4d63-9bef-b597f0655c83;jdo ;014802813;hear|speak|talking|floor;0;0;0;0\n\nConference 10-1234.c.fdf.c (1 member rate: 32000 flags: running|answered|enforce_min|dynamic|exit_sound|enter_sound)175;.net/4122@mydomain;77c1f301-85e1-4275-9c539e5927b87d6;4122;hear|speak|talking|floor;0;0;0;0"
print(string.match(str, 'Conference 10%-(%d%d%d%d)') )
                                      ^

will print 1234

来自Lua 20.2 – Patterns reference

  

某些字符(称为魔术字符)在模式中使用时具有特殊含义。

是神奇的角色      

( ) . % + - * ? [ ^ $

     

角色%可以作为这些魔法角色的逃脱。

答案 1 :(得分:0)

使用gsub()

print(string.gsub(".*Conference 10%-(%d%d%d%d)%-.*", "%1"));