質問

ルアで達成することは可能ですか?

local noSlashEnding = string.gsub("slash\\ending\\string\\", "\\|/$", "")
-- noSlashEnding should contain "slash\\ending\\string"

local noSlashEnding2 = string.gsub("slash/ending/string/", "\\|/$", "")
-- noSlashEnding2 should contain "slash/ending/string"

ここでのポイントは、LUAパターンの論理的または「ステートメント」または「ステートメントの受け入れなし」です。


編集:これを行うことでそれが可能であることに気付いただけです:

strng.gsub("slash\\ending\\string\\", "[\\,/]$", "")

論理的な 'または' forパターンはまだ欠落していますが。

役に立ちましたか?

解決

LUAは、パターンマッチングに標準的な正規表現を使用しません。本からの引用 ルアでのプログラミング 理由を説明します:

他のいくつかのスクリプト言語とは異なり、LUAはパターンマッチングにPOSIX正規表現(Regexp)を使用していません。これの主な理由はサイズです。POSIXRegexpの典型的な実装は、4,000行以上のコードを使用します。これは、すべてのLUA標準ライブラリよりも大きいです。それに比べて、LUAでのパターンマッチングの実装には500回未満のラインがあります。もちろん、LUAで一致するパターンは、完全なPOSIX実装が行うことをすべて実行することはできません。それにもかかわらず、LUAでのパターンマッチングは強力なツールであり、標準のPOSIX実装と一致するのが難しいいくつかの機能が含まれています。

ただし、既存の正規表現ライブラリには多くのバインディングがあり、高度なバインディングもあります lpeg 図書館。リンクがあるそれらのリストについては、参照してください http://lua-users.org/wiki/librariesandbindings, 、章 Text processing.

また、この質問を参照してください。 LUAパターンマッチングと正規表現

他のヒント

ルア パターンマッチング 正規表現と同じではなく、代替概念がありません。

たとえば、削除したい場合 "abc" また "efg" 文字列の終わりから(に似ています "(abc|efg)$" 正規表現)次のコードはうまく機能します。

local inputstring="123efgabc"
local s,n = inputstring:gsub("abc$", "")
if n == 0 then
  s,n = inputstring:gsub("efg$", "")
end
print(s) --> 123efg

LUAの正規表現は...異常です。ドキュメントから知る限り、一般的な交互の代替や繰り返しオペレーターをグループに適用することはサポートされていません。あなたの場合、あなたが言うように、あなたはキャラクタークラスであなたが望むものを得ることができます(ただし、あなたのキャラクタークラスでコンマが何をしているのかわかりません)。

ここを参照してください: http://www.lua.org/manual/5.1/manual.html#5.4.1

(私が以前取り組んでいたプロジェクトで、私たちはこのためにPCREに独自のLUAバインディングを書きました。)

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top