在Lua中检查字符串是否以特定模式开头和结尾。

我有一张包含字符串值的表格

data_table = {'(?P<smartcache>.+)$', 'css', '123454', '(?P<version>.+)$'}

我想判断一个字符串是否以 (?P< 开头,是否以 )$ 结尾。 我希望输出一个类似于以下的字符串:

output_table = '/smartcache/css/123454/version'

我遇到了提取用模式传递的值的问题,例如我想从 (?P<smartcache>.+)$ 中提取 'smartcache'

我的尝试:

out_string_value = (string.match(uri_regex, '[^(?P<].+[)$]')

在这里,我得到的输出是 smartcache>.+)$,但我想要的是 smartcache

点赞
用户1078583
用户1078583

我不了解 Lua Pattern 语法的复杂性,但是以正则表达式的术语来说,这将是模式:

^\(\?P<([^>]+)>.*\)\$$

正则表达式演示中,您可以看到匹配。

  • ^锚定断言我们在字符串的开头
  • \(匹配一个左括号
  • \?匹配一个问号
  • P<匹配字面字符
  • ([^>]+)捕获除 >外的任何字符到第1组
  • >匹配字面字符
  • .*匹配任意字符
  • \)匹配一个右括号
  • \$匹配一个美元符号
  • $锚定断言我们在字符串的结尾
2014-07-22 09:26:15
用户1009479
用户1009479
local uri_regex = '(?P<smartcache>.+)$'
local out_string_value = uri_regex:match('^%%%(?P<([^>]+)>.-)%%%$')
print(out_string_value)

Lua 模式 ^%%%(?P<([^>]+)>.-)%%%$ 类似于正则表达式 ^\(\?P<([^>]+)>.*\)\$$,只是 Lua 模式使用 % 转义特殊字符。

2014-07-22 10:01:49