2

次のような置換を実行できるように、正規表現をどのように構築しますか?

  • abcdef[Backspace][Backspace][Backspace]->abc
  • [Backspace][Backspace]->(空の文字列)

現在、ループ内でバックスペースを1つずつ置き換えようとしています。別の方法はありますか?

4

2 に答える 2

3

最初に頭に浮かぶのは.\[Backspace\]、一致する限り、ループ内の空の文字列に置き換えることです。\[Backspace\]次に、グローバルに空の文字列に置き換えます。

編集:コメントで提起されているように、バックスペースが多すぎると答えはうまく機能しません。

解決策として、置換を繰り返す前に、すべて^\[Backspace\]を空の文字列に 置き換えることができ.\[Backspace\]ます。

グループ化のためのPerlルールを想定するとs/^(?:\[Backspace\])*//、トリックを実行します。

于 2012-10-24T13:44:21.557 に答える
1

完全を期すために、ネガティブルックビハインド(おそらく自分で使用するつもりだったもの)を使用したソリューションを次に示します。

(^|.(?<!\[Backspace]))\[Backspace]

そして、空の文字列に置き換えます。これをループで実行します。Javaを使用している場合、またはバックスラッシュのエスケープが必要なその他の状況がある場合は、2つのバックスラッシュを2倍にします。

于 2012-10-24T14:11:59.947 に答える