2016-12-17 8 views
1

正規表現のオンラインと私のJavaコードの間に2つの異なる結果があります。regexとjavaを介してファイルの一部を変更します。

私の入力テキスト:

Examples: 
    #DATA 
    |id|author|zip|city|element| 
    Odl data - Odl data - Odl data  
    #END 

私はfooで(私の例では)Odl data - Odl data - Odl dataを変更します。

私の正規表現は次のとおりです。私はfooオンラインデモ

enter image description here

によってグループ1を変更したい

#DATA[\s\S].*[\s\S]([\s\S]*)#END 

https://regex101.com/r/Nq9fas/2

私のJavaコード:

final String regex = "#DATA[\\s\\S].*[\\s\\S]([\\s\\S]*)#END"; 
final Pattern pattern = Pattern.compile(regex); 
final Matcher matcher = pattern.matcher(string); 

if (matcher.find()) { 
    System.out.println("Full match: " + matcher.group(0)); 
    for (int i = 1; i <= matcher.groupCount(); i++) { 
     System.out.println("Group " + i + ": " + matcher.group(i)); 
    } 
} 

私は第一ラインキープしたい#DATAと#END betwinが、私の正規表現の変更すべてのデータ

+0

https://regex101.com/r/Qllz0P/1 –

答えて

1

点である(| ID |著者|ジップを|市| |要素)あなたが保持する必要があるものをと取り換えてを取り除き/取り替えて一致させるために必要なものに合ってください。

あなたは

(#DATA\r?\n.*\r?\n)[\s\S]*(#END) 

replaceFirstを使用することができregex demoを参照してください。 In Java

String res = s.replaceFirst("(#DATA\r?\n.*\r?\n)[\\s\\S]*(#END)", "$1foo\n$2"); 

:あなたは、交換する唯一の1行を持っている場合は、

(#DATA\r?\n.*\r?\n).*([\s\S]*#END) 

注2使用:テキスト内のいくつかのように "ブロック" を持っている場合は、使用を[\s\S]replaceAllの代わりreplaceFirstで使用して怠惰な量指定子:

(#DATA\r?\n.*\r?\n).*([\s\S]*?#END) 
          ^^ 
関連する問題