2012-11-28 17 views
8

パブリックメソッドを、コメントを持つメソッドの保護されたメソッドに置き換えようとしています。geanyの名前付きグループregexpの置換を検索

これは私がこれらのメソッドのいくつかをテストするためにphpunitを使用しているためですが、実際にはパブリックにする必要はないので、プロダクションサーバーでスイッチを切り替えてテストするときに戻したいと思います。ここで

は、メソッドの宣言です:

public function extractFile($fileName){ //TODO: change to protected 

これは正規表現です:

(?<ws>^\s+)(?<pb>public)(?<fn>[^/\n]+)(?<cm>//TODO: change to protected) 

私はそれを交換する場合:

\1protected\3\//TODO: change back to public for testing 

それが動作しているようだが、どのようなI取り替えの名前をつけることができない。最初のグループを取得するには\ 1を使用する必要があります。グループのテキストに置き換えてアクセスできない場合は、そのグループに名前を付けるのはなぜですか? \、$ ws、\ w wsのようなものは試しても動作しません。

私の質問は、\ 1を名前付きグループに置き換えたい場合、置き換えるテキストは何ですか?

+0

ありがとう、それはしませんでした。ドキュメントのどこにも見つかりません。グループに名前を付けることができる場合は、置換文字列で使用できると思います。私は通常、あなたがそれを受け入れることができるようになりました。今これを行うでしょう。 – HMR

答えて

6

?<ws>という名前のグループ構文は、.NET/Perlで使用される構文と同じです。これらの正規表現エンジンの場合、名前付きグループの置換文字列参照は${ws}です。これはあなたの置換文字列は次のようになり意味:

${ws}protected${fn}\//TODO: change back to public for testing

m.buettner言及\k<ws>参照のみ、実際の正規表現で後方参照のために使用されています。

追加情報:geanyもPythonのスタイルという名前のグループを使用することができますように

は思え:

  • ?P<ws>は、撮影構文
  • \g<ws>ある置換文字列の構文は
  • (?P=ws)されています正規表現の逆参照構文

EDIT:

は解決策が出てパンしていなかったため、私の希望を検索します。 manualから

"サブパターンの名前は、(?...)または(? 'name' ...)のようにPerlの場合、(?P ...)のようにPython。のパターンのの他の部分(逆参照、再帰、条件など)のキャプチャへの参照は、の名前と番号で行うことができます。

そして、さらに下:名前のサブパターンに

「後方参照を Perlの構文\ kのか\ k'name」やPythonの構文(?P = name)を使用します。「

によって参照されるサブパターン前または参照の後パターンに表示される場合があります。』だから

、名前の使用するための構文の私の推論あなたの質問に答えるのはなぜですか?

どのように愚かなのですか?マッチングされたパターンで名前付きグループとその使用法を実装すると、置換文字列での使用法を実装しないのはなぜですか?

+0

ありがとうございます。たぶん私は別のgeanyを持っていますが、私は "$ {w} 8"と置き換えて式 "(? win)7"を使って "win7"というテキストを持っていれば、結果は "$ {w} 8" geany 1.22 – HMR

+0

@HMR - 私は実際にgeanyを持っていません。私は、キャプチャ構文が.NET/Perlと同じであるという観察を行いました。これは、オンラインマニュアルをチェックしたときに確認されたので、どちらも '? 'を許可します。私は基礎となる正規表現エンジンが、置換文字列内のキャプチャと同じスタイルを可能にすることを期待していました。ちょうどマニュアルのいくつかのより多くの読書をしました。名前付きグループのようなものは、置換文字列で_not_できません。私は答えを編集して詳細を追加します。 – robinCTS

+0

これを調べる時間を取ってくれてありがとうございました。私は、置換文字列に関するドキュメントで何も見つけられませんでしたが、それを否定する前に何かを見落とさないようにしたいと思います。 – HMR

関連する問題