1

私は次のような文字列を持っていますhello /world today/

に置き換える必要があり/world today/ます/MY NEW STRING/

私が見つけたマニュアルを読む

newString = string.match("hello /world today/","%b//")

置換に使用できますがgsub、の間のテキストだけを返すエレガントな方法もあるのではない/かと思いました。トリミングするだけでよいのはわかっていますが、パターンがあるのではないかと思いました。

4

1 に答える 1

2

次のいずれかを試してください。

  • slashed_text = string.match("hello /world today/", "/([^/]*)/")
  • slashed_text = string.match("hello /world today/", "/(.-)/")
  • slashed_text = string.match("hello /world today/", "/(.*)/")

これが機能string.matchするのは、パターンからキャプチャを返すか、キャプチャがない場合は一致したテキスト全体を返すためです。重要なのは、Luaパターンが完全な正規表現言語ではないことを忘れずに、パターンに適切な量の貪欲さがあることを確認することです。

最初の2つは同じテキストに一致する必要があります。最初に、パターンができるだけ多くの非スラッシュに一致することを明示的に要求しました。2番目(ありがとうlhf)は、すべての文字の最短スパンに一致し、その後にスラッシュが続きます。3つ目は貪欲で、スラッシュを続けることができる最長の文字スパンに一致します。

2つの区切り文字は同じ文字であるため%b//、元の質問のは何の利点もありません。/.-/

編集: lhfによって提案されたパターンとその他の説明を追加しました。

于 2010-09-03T08:38:44.770 に答える