1

Lua を使用して、特定のワイルドカード文字列を別の文字列に置き換えようとしています。それはおそらく明確ではないので、ここに私の例があります:

ディレクトリの文字列がある場合:

C:\可能な変更されたディレクトリ名\別の変更名\既知のソリッド フォルダー\workingDir

次のようになります。

C:\ROOT\workingDir

ルートと現在のディレクトリの間の文字列を置き換えることができるもの。したがって、太字のディレクトリ文字列は置き換えられます。ディレクトリは可変であることに注意してください。これが、置換するワイルドカードが必要な理由です。したがって、基本的には 2 つの「アンカー」文字列を知っていますが、その間にあるものはすべて不明/可変です。

更新: 文字列は次のように保存されます: "c:\\program files (x86)\\" 二重のバックスラッシュは置換に影響しますか?

4

2 に答える 2

1

Luaパターンを使用できます..

「既知のソリッドフォルダー」が定数であると仮定すると、次のパターンを使用できます

local str = "C:\\ possible changed dir name \\ another change name \\ known solid folder \\ workingDir"
local toFind = "(C:\\).*(known solid folder)"
local toReplace = "C:\\ ROOT"

str = str:gsub(toFind,toReplace)

.*toFind 変数の はワイルド カードです。「C:\」と「既知のソリッドフォルダー」の間のすべての文字を提供します

于 2012-12-04T02:57:34.073 に答える
0

"C:\\ROOT\\workingDir"接頭辞 ("C:\") と接尾辞 ("\workingDir") の両方がわかっている場合は、返さないのはなぜですか?

単純な置換は機能するはずですが、「既知のソリッド フォルダー」にテンプレートで特別な意味を持つ文字が含まれている場合は注意が必要な場合があります。

function root(path, known_folder)
  local function q(s) return s:gsub('([%(%)%.%%%+%-%*%?%[%^%$%]])','%%%1') end
  return (path:gsub("^(%w:\\).+"..q(known_folder), "%1ROOT"))
end
print(root([[C:\possible...\another change...\known solid folder\workingDir]],
      "known solid folder"))

これは印刷されC:\ROOT\workingDirます。

于 2012-12-04T03:37:40.130 に答える