1

次の場合、適切な正規表現検索と置換を考え出すのに苦労しています。RichFaces 3 から RichFaces 4 への移行を行っていますが、これまでのところ、正規表現で多くの変更を行うことができました。

私はこのようなものを持っています:

     <a:ajax execute="@this"
    rendered="whatever" action="#{bean.method} 
someotherstuff="whatever"
    />

私がやりたいのは、上記の action= を listener= に置き換えることですが、他には何も変更せずに、a:ajax タグ内でのみ実行したいと考えています。属性の順序と発生は異なる場合があります。

したがって、基本的には次のような検索と置換が必要です。

<a:ajax(SEARCH1)action="(.+?)"(SEARCH2)/>

と置換する

<a:ajax$1listener="$2"$3/>

何か案は。先読みが必要かもしれないと思いますが、まだ取り組んでいません

更新: 受け入れられた解決策は、検索のために Eclipse で機能しますが、ルックアラウンドを使用すると置換が機能しないという Eclipse の既知のバグがあります: https://bugs.eclipse.org/bugs/show_bug.cgi?id= 109481

4

1 に答える 1

1

action=a:ajax タグ内で置き換えたい場合listener=は、先読みではなく後読みが必要になります。また、Java での後読みとは、後読み範囲の最大長を定義する必要があることを意味することに注意する必要があります。

(?<=a:ajax[\w\W\n]{1,100})action=" ワイルドカードの範囲が 1 から 100 までのように、必要に応じて{1,100}.

できるよ

.replaceAll("(?<=a:ajax[\\w\\W\\n]{1,100})action=\"","listener=\"")

正規表現の後読みに関する注意:

  • 有限反復を許可する Java。アスタリスクやプラス記号は引き続き使用できませんが、最大パラメータを指定して疑問符と中かっこを使用できます。
  • JGsoft エンジンと .NET フレームワークの RegEx クラスは、後読み内で完全な正規表現を実行できます。
  • Javascript は後読みをサポートしていません。
  • Python は、後読み内でのみ固定長を使用できます。
于 2013-08-08T14:33:44.263 に答える