Powershell で Rexex を使用する際に少し問題が発生しました。実装エラーか何かがあるようです。
作業したいテキストは、次のような html ファイルです (例 1):
<span>[Mobile: %mobile% |] Phone: %telephone% [| Fax: %faxNumber%]</span>
<Span>
問題は、html エディターが原因で、次のような結果が得られることです (例 2):
<span>[Mobile:
%mobile% |] Phone: %telephone% [| Fax: %faxNumber%]</span>
ご覧のとおり、改行と html エスケープ、固定された空白があります
。
私の Powershell 正規表現は次のようになります。
$x = $x -ireplace '(?ms)\[(.?){7}Fax(.*?)\]', 'MyReplacement1'
この
$x = $x -ireplace '(?ms)\[(.?){7}Mobile(.*?)\]', 'MyReplacement2'
基本的に[は変数の始まりを示し、]は変数の終わりを示します。これにより、次の 2 つの問題が発生します。
- モバイルとファックスの 2 つの変数を取得したので、
(.?){7}
いくつかの (ここでは正確に 7) 文字を許可し、最初の [モバイルの近くと最後の]ファックスの近くの穴の部分を一致させないように使用しています (これは、私が使用している場合に発生します)。(.*?)
の代わりに(.?){7}
)。たとえば、開始 [ と変数キーワード「Fax」の間に任意の数 (7 ではなく) の文字を許可できる代替手段があるかどうかはわかりません。これは、次のようなものが追加されたときにミスマッチを回避するのに役立ち
ます(7文字だけでは不十分で、私が言った(.*?)
ように失敗します)。私はそれを説明できたことを願っています (ちょっと難しい) - そうでない場合: お気軽にお尋ねください! - Powershells -replace メソッドは正規表現オプションを設定する方法を提供していないため、(?ms) を使用して DotAll および複数行モードを設定する必要がありました。ご覧のとおり、正規表現パターン内で使用しています。ただし、 example2のようにMobile:と%mobile%の間に改行が追加されると、正規表現は失敗し、何も置き換えられません!
私が今考えていないさらなる問題を回避するために、プロからの助けや正規表現の推奨事項さえあれば、私は大歓迎です...
編集: (例 3):
<span>[Mobile:
%mobile% |] Phone: %telephone% [| Fax:
%faxNumber%]</span>