2014-07-22 46 views
2
特定的模式結束

我有是有弦的表值檢查字符串開始,並在Lua

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

我想看看是否一個字符串startswith「(ΔP<」和endswith「) $'。 我想在輸出一個字符串,它會像

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

我面臨的問題,就像我想從(?P<smartcache>.+)$'smartcache'獲取其與模式 傳遞的值。

我嘗試:

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

這裏我收到輸出smartcache>.+)$但我想smartcache

回答

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的模式語法的複雜性,但在正則表達式而言,這將是一個模式:

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

the regex demo,你可以看到比賽。

  • ^錨斷言,我們是在字符串
  • \(的開始匹配的左括號
  • \?相匹配的問號
  • P<匹配文字字符
  • ([^>]+)捕捉任何字符是不是>到第1組
  • >對應lite拉爾炭
  • .*任何字符
  • \)匹配的右括號
  • \$相匹配的元匹配
  • $錨斷言,我們是在字符串的末尾
+0

謝謝,但我想在同一操作中獲取在<>內傳遞的值。 –

+1

添加了一個捕獲組。該值將在組1('$ 1')中 – zx81

+1

請參見[新演示](http://regex101.com/r/dP1aZ8/28):該值突出顯示。這是組1,不確定Lua語法來檢索它,可能是$ 1' – zx81

相關問題