检查字符串是否以Lua中的特定模式开始和结束

时间:2014-07-22 09:21:12

标签: string lua lua-patterns

我有一个具有字符串值的表

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

我正在尝试查看字符串startswith&#39;(?P&lt;&#39;和endswith&#39;)$&#39; 。 我希望输出中的字符串类似于

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

我面临着获取带有模式传递的值的问题 我希望从'smartcache'获取(?P<smartcache>.+)$

我的尝试:

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

此处我的输出为smartcache>.+)$,但我想要smartcache

2 个答案:

答案 0 :(得分:2)

local uri_regex = '(?P<smartcache>.+)$'
local out_string_value = uri_regex:match('^%(%?P<([^>]+)>.*%)%$$')
print(out_string_value)

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

答案 1 :(得分:1)

我不知道Lua Pattern语法的复杂性,但在正则表达式中,这将是模式:

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

the regex demo上,您可以看到匹配。

  • ^锚点断言我们位于字符串的开头
  • \(匹配一个左括号
  • \?匹配问号
  • P<匹配文字字符
  • ([^>]+)会捕获任何非>到第1组
  • 的字符
  • >匹配文字字符
  • .*匹配任何字符
  • \)匹配右括号
  • \$匹配一美元
  • $锚点断言我们位于字符串的末尾