使用正则表达式

时间:2016-10-30 21:49:10

标签: java regex utf-8

我错误地完成了数据处理工作和非转义数据。它取代了所有utf-8,如\x0a\xfa to x0axfa 我想写一个正则表达式将\放回x之前。我试过这个:

`regex:((\([\x00-\x7F]\)|\w){2})+`
replace with: \\$1

但是,它会使用\替换最后2个字符前的所有内容。什么是解决这个问题的正确方法。 (我必须做正则表达式替换,不能再做数据处理。它很大。)

  

输入:blah blah x0ax0fx12 ...

     

所需输出:blah blah \ x0a \ x0f \ x12 ...

2 个答案:

答案 0 :(得分:1)

使用后面的方法来防止转义已转义的内容,并提前查找斜杠的插入点:

popen(("zcat " + filename).c_str(), "rb")

Java正则表达式中的文字反斜杠需要四重反斜杠;为正则表达式转义一次,然后再为字符串文字转义。

答案 1 :(得分:0)

在这种情况下,我会使用像(x[0-9A-Fa-f]{1,4})+这样的表达式来识别每行没有反斜杠的UTF-8数据块。

从那里,您可以使用Java的string.split(" x")来创建一个字符串数组,表示没有" x"的字节。如果regexMatch是一个包含表达式匹配的字符串,例如" x0ax0fx12",那么您可以执行以下操作:

import java.io.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Test {
    public static void main(String args[]) {
        String inputText = "blah blah x0ax0fx12 blah blah";
        String regexMatch = "";
        Pattern pattern = Pattern.compile("(x[0-9A-Fa-f]{1,4})+");
        Matcher matcher = pattern.matcher(inputText);                
        if (matcher.find()) {
            regexMatch = matcher.group(0);
        }                
        String replacedOutput = "";
        for (String splitStr : regexMatch.split("x")) {            
            if (!splitStr.equals("")) {                
                replacedOutput += "\\x" + splitStr;
            }            
        }        
      System.out.println(replacedOutput); 
   }
}

这应输出" \ x0a \ x0f \ x12"并且您应该能够将其替换回匹配在您的文件中匹配的行,在匹配器找到它的位置。