【问题标题】:String parsing using complex patterns使用复杂模式的字符串解析
【发布时间】:2015-10-21 04:01:14
【问题描述】:

我有一个包含未知数量的字母、数字和字符的复杂字符串。比如

"a83bal*av31-ab+asf3/af1124-xxx.afe-100/araw31/31*xxx.g41.abt.eta+131as*dfa"

目标是找到字符串 xxx 并提取它之后的所有内容,直到 +-*/。因此,我应该能够提取xxx.afexxx.g41.abt.eta 查找字符串很简单string:find("xxx") 我遇到的麻烦是收集"xxx" 之后的所有信息,直到其中一个操作员。我尝试过类似

string:match("xxx.(.+[%+%-%*%/])")

以及上述的几种变体,但我缺少一些东西。

【问题讨论】:

    标签: string lua lua-patterns


    【解决方案1】:
    str = "a83bal*av31-ab+asf3/af1124-xxx.afe-100/araw31/31*xxx.g41.abt.eta+131as*dfa"    
    for m in str:gmatch("[+%-*/](xxx.-)[+%-*/]") do
        print(m)
    end
    

    注意-即使在字符集中也有特殊含义(例如[1-9a-f]),所以它必须被转义,或者放在字符集的开头或结尾,即[-+*/]

    【讨论】:

      【解决方案2】:

      您可以使用否定字符类来匹配([^-+*/]):

      for sWord in str:gmatch "xxx%.([^-+*/]+)" do
          -- do things to sWord
      end
      

      请注意,查看您的代码 sn-p;您正在使用名为 string 的变量。 string 存储 lua 环境中通用字符串数据类型的元表。请避免使用这样的变量名。

      【讨论】:

      • string 不存储字符串的元表。它存储该元表的__index 值。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-06-20
      • 1970-01-01
      • 2012-05-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多