2011-11-14 6 views
0

をdiscussion2。 私の正規表現は最初のパターンの出現だけに成功します。この最初のパターンの後に続くすべてのパターンには、前のパターンが含まれます。Javaの正規表現は、正規表現のために、このパターンを有する

など。私はそれが私が再帰的に

setSomething(false); 
executeRule(document, 'PublishDocumentsToEmail', [ 
    'xmlMapping':'xmlmapping.TagRegLike', 
    'emailAddress':'EMAIL([email protected])', 
    'emailSubject':'Test', 
    'emailText':'test', 
    'filenameSuffix':'test'] 
    ,crs 
); 

System.out.println("bla"); 

executeRule(document, 'PublishDocumentsToJMS', [ 
    'xmlMapping':'xmlmapping.TagRegLike', 
    'emailAddress':'EMAIL([email protected])', 
    'emailSubject':'Test', 
    'emailText':'test', 
    'filenameSuffix':'test'] 
); 
で新しいテキストと同じ構文解析メソッドを呼び出し、この後

executeRule(document, 'PublishDocumentsToEmail', [ 
     'xmlMapping':'xmlmapping.TagRegLike', 
     'emailAddress':'EMAIL([email protected])', 
     'emailSubject':'Test', 
     'emailText':'test', 
     'filenameSuffix':'test'] 
     ,crs 
    ); 

なるよう

executeRule(document, 'PublishDocumentsToEmail', [ 
    'xmlMapping':'xmlmapping.TagRegLike', 
    'emailAddress':'EMAIL([email protected])', 
    'emailSubject':'Test', 
    'emailText':'test', 
    'filenameSuffix':'test'] 
); 

私はパターンにいくつかの置換を行う見つけ、私が解析し、初めて

と私の正規表現は、全体のセクションと一致します

executeRule(document, 'PublishDocumentsToEmail', [ 
    'xmlMapping':'xmlmapping.TagRegLike', 
    'emailAddress':'EMAIL([email protected])', 
    'emailSubject':'Test', 
    'emailText':'test', 
    'filenameSuffix':'test'] 
    ,crs 
); 

System.out.println("bla"); 

executeRule(document, 'PublishDocumentsToJMS', [ 
    'xmlMapping':'xmlmapping.TagRegLike', 
    'emailAddress':'EMAIL([email protected])', 
    'emailSubject':'Test', 
    'emailText':'test', 
    'filenameSuffix':'test'] 
); 

2番目のパターンと一致するようにするにはどうすればよいですか? index最初/既に修飾発生後である

Thxを

答えて

1

私は徹底的にあなたの例を読んでいないが、あなたはどちらかMatcher#find()を使用した場合の一致を超える最後の試合か、単にループの後に開始するには、あなたのパターンで\Gを使用することができます。

希望に役立ちます。

更新:私は再帰的で新しいテキストと同じ構文解析メソッドを呼び出し、この後

...

は、なぜあなたは再帰的にそれを呼ぶのでしょうか?私は再帰を見ないので、あなたは最初の呼び出しで見つかったマッチを繰り返し処理するかもしれません。

0

あなたがやろうとしていることは、同じ構造のすべてのexecuteRule文字列の最後の行に,crsを追加することですか?それは十分に簡単です:

s = s.replaceAll("(?m)^executeRule\\([^\\[]*\\[(\\s*)[^\\]]*\\]", "$0$1,crs"); 

I終値]にちょうどマッチしたすべてのものまで(道に沿っていくつかの先頭の空白のサンプルをキャプチャ)し、それをバック差し込まれ、,crsラインを追加しました。あなたのニーズがそれよりも複雑な場合は、その内容を正確に伝える必要があります。しかし、あなたが今やっているように、複数のパスを入力よりも上げる方が良い解決策があると確信しています。