引用されたテキストの適切なLUAパターンは何ですか?
-
29-09-2019 - |
質問
私はこれを1時間またはけん引していますが、LUAパターンと一致するユーティリティを備えたロードブロックにいることに気づきました。引用されたすべてのテキストを文字列で一致させ、必要に応じて交換しようとしています。
私がこれまでに思いついたパターンは:(?[ " '])(.-)%1です。
これは場合によっては機能しますが、すべての場合ではありません。
Working: "This \"is a\" string of \"text to\" test with"
Not Working: "T\\\"his \"is\' a\" string\" of\' text\" to \"test\" wit\\\"h"
うまくいかない例では、私が一致させたいと思います(私が望むマッチを取得する関数を作成しました。GSUBで使用するパターンを探しています。
string
a" string" of
is' a" string" of' text
test
his "is' a" string" of' text" to "test" wit
当面は代わりに自分の関数を使い続けますが、使用できる/使用できるパターンがあるかどうか興味がありますが、パターンで何かが欠けています。
(いくつかの編集b/c私はStackoverflowsのフォーミングを忘れていました)(HTMLを解析しようとしているという仮定につながっていたため、非HTMLの例を作成する別の編集)
解決
正規表現を使用して、逃げられた引用されたテキストに合わせようとすることは、芝刈り機を使用してフィールドからヒナギク(およびdaiseのみ)を削除しようとするようなものです。
私が望む試合を取得する関数を作成しました
これは正しい動きです。
Luaパターンがこれを行うことができるかどうかは興味があります
実用的な観点から、 パターンがこれを行うことができたとしても、あなたはしたくありません。 理論的な観点から、あなたは偶数のバックスラッシュが先行する二重の引用を見つけようとしています。これは間違いなく正常な言語であり、あなたが望む正規表現は次のようなものです(Luaは慣習を引用しています)
[[[^\](\\)*"(.-[^\](\\)*)"]]
引用された文字列は結果#2になります。しかし、Luaパターンはそうです いいえ 完全な正規表現;特に、aを置くことはできません *
括弧付きのパターンの後。それで 私の推測では、この問題はLUAパターンを使用して解決できないと思います。 しかし、LUAパターンはオートマトン理論の標準的なものではないため、私はあなたがそれを証明するために使用できる証明技術の体を知りません。
他のヒント
逃げられた引用の問題は、一般的に、引用の前に奇数のバックスラッシュがある場合、それは逃げられ、偶数がある場合、そうではないということです。 LUAパターンマッチングがこの状態を表すほど強力であるとは思わないので、このようなテキストを解析する必要がある場合は、別の方法を探す必要があります。たぶん、文字列を繰り返して解析するか、各見積もりを順番に見つけて後方に読み、バックスラッシュ以外の文字(または文字列の始まり)を見つけるまでバックスラッシュをカウントすることができます。
何らかの理由でパターンを絶対に使用する必要がある場合は、マルチステッププロセスでこれを実行することができます。まず、2つのバックスラッシュのすべての発生のGSUBを連続して、それらをある程度のセンチネルの価値に置き換えます。これ しなければならない 文字列にまだ発生していない値になります。この文字列に印刷できない文字が含まれていないことがわかっている場合、「 001」のようなものを試すことができます。とにかく、2つのバックスラッシュのすべてのシーケンスを連続して交換すると、残ったバックスラッシュは次の文字を逃れます。これで、元のパターンを適用できるようになり、最後にセンチネル値のすべてのインスタンスを2つのバックスラッシュに置き換えることができます。
あなたがすべき いいえ 正規表現でHTMLを解析しようとしている、HTMLとXMLは いいえ 通常の言語であり、正規表現で正常に操作することはできません。専用のHTMLパーサーを使用する必要があります。 ここに多くの説明があります.