2017-05-22 12 views
3

の文字列の最後の部分、私はこの部分のみ289が必要エキス、私はこのような文字列の最後の部分を抽出する必要がLuaの

http://development.dest/show/images-345/name/289/ 

は、私は次のパターンでstring.matchを使用してみました。

string.match(url, "(%d+)(\/)$") 

そして私は、エラーログにこのエラーを取得し、

2017/05/22 20:53:04 [error] 31264#0: *5 failed to load external Lua file 

私は、パターンの最後の部分が間違っていると思うが、私はそれを修正する方法((\/))を知りません。

+0

、これらは文字クラスを作成し、括弧は、キャプチャするためのものです。また、0または1のスラッシュに一致する疑問符を追加しました。 ''(%d +)[\ /]?$ "'はあなたが望むものです。キャプチャの結果を記録または印刷することは可能ですか?そうすれば、診断が容易になります。 – ktb

答えて

4

のLuaからのエラーメッセージが\/はLuaの文字列で有効なエスケープシーケンスではないことを言う

invalid escape sequence near '"(%d+)(\/' 

です。

以下のシンプルなパターンが正常に動作します:

print(string.match(url, "(%d+)/$")) 

最後のスラッシュがオプションである場合は、URLを処理するために使用LuaSocket

print(string.match(url, "(%d+)/?$")) 
+0

最後のスラッシュをオプションにすると、パターンはどのようになりますか? –

4

を使用しています。この方法で、あなたは簡単にプロトコルやクエリなどを解析することもできますが、正規表現の地獄を通過する必要はありません。あなたは括弧を必要とする代わりに、括弧の

local url = assert(require"socket.url") 

local parsed_url = url.parse"http://development.dest/show/images-345/name/289/" 
local path  = url.parse_path(parsed_url.path) 

print(path[#path]) 
+0

ルアパターンは正規表現ではなく、使い方が喜ばしいです! – tonypdmtr

関連する問題