Javaで次のCobolコードを解析しようとしています。Java正規表現で単語を否定しようとすると問題が発生する
PNAME. P000 084500 MOVE src1 TO dest1 P110 084510 MOVE src2 TO dest2 P111 084520 MOVE src3 TO dest3 P115 084530 MOVE src4 TO dest4 P120 084540 MOVE src5 TO dest5. P140 084550 PERFORM TOTO THRU TOTO-FN. P310
私の目標は、指定された名前に対応するMOVEステートメントを見つけることです。
例:dest5と一緒に「MOVE src5 to dest5」を検索したい
私のJavaコードです:
MOVE src1 TO dest1 P110 084510 MOVE src2 TO dest2 P111 084520 MOVE src3 TO dest3 P115 084530 MOVE src4 TO dest4 P120 084540 MOVE src5 TO dest5.
をしかし、私はこれだけの行を取得したい:
String paragraphePart = "PNAME. P000 084500 MOVE src1 TO dest1 P110 084510 MOVE src2 TO dest2 P111 084520 MOVE src3 TO dest3 P115 084530 MOVE src4 TO dest4 P120 084540 MOVE src5 TO dest5. P140 084550 PERFORM TOTO THRU TOTO-FN. P310"; Matcher m = Pattern.compile("MOVE((?!.*MOVE.*).)*TO\\s+[^\\.]*"+"dest5"+"(\\s+|\\.|$)",Pattern.MULTILINE).matcher(paragraphePart); while(m.find()){ //treatement on m.group(0) }
m.group(0)含まれています "dest5 TO MOVEのsrc5を"私はMOVEのようなものを使用してきた私の正規表現で * TO私はこの場合持つことができるので:ここ
084540 MOVE P120 084550 src5 TO dest5.
を私は をdest5だけdest5 TO src5ないようにP120 084550 src5を移動取得する必要があります。
どうすれば私の正規表現にMOVEの後に何かがあると言えるでしょうか?別の "MOVE"ではなく、 "TO"が続いていますか?
おかげ
[SOLVED]
私が使用します。
Matcher m = Pattern.compile("(MOVE(?!.*?MOVE).*?\\s+TO\\s+[^\\.]*"+fieldName+"(\\s+|\\.|$))", Pattern.DOTALL).matcher(paragraphePart);
はあなたanubhavaをありがとう!私はMOVEのsrc5がdest5ために得ることができます Matcher m = Pattern.compile("(MOVE(?!.*?MOVE).*?\\s+TO\\s+[^\\.]*"+"dest5"+"(\\s+|\\.|$))", Pattern.DOTALL).matcher(paragraphePart);
を使用して
https://stackoverflow.com/a/8803309/1140748
[NEW PB] 。しかし、私が "dest4"を使ってこの行を "src4 to dest4"にしようとすると、もう動作しません。アイデアはありますか?
Matcher m = Pattern.compile("(MOVE(?!.*?MOVE.*?"+fieldName+").*?\\s+\\w+\\s+TO\\s+[^\\.]*"+fieldName+"(\\s+|\\.|$))", Pattern.DOTALL).matcher(paragraphePart);
http://koopa.sourceforge.net/さらなる研究のための –
TY良いリンク;)速い答えのため –