Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 字符串替换为正则表达式不';我不能正常工作_Java_Regex - Fatal编程技术网

Java 字符串替换为正则表达式不';我不能正常工作

Java 字符串替换为正则表达式不';我不能正常工作,java,regex,Java,Regex,我试图使用iText操作pdf中的字符串,但我遇到了一个问题,当我在replace方法中设置正则表达式时,它不起作用 PdfReader reader = new PdfReader(src); PdfDictionary dict = reader.getPageN(1); PdfObject object = dict.getDirectObject(PdfName.CONTENTS); if (object instanceof PRStream) {

我试图使用iText操作pdf中的字符串,但我遇到了一个问题,当我在replace方法中设置正则表达式时,它不起作用

    PdfReader reader = new PdfReader(src);
    PdfDictionary dict = reader.getPageN(1);
    PdfObject object = dict.getDirectObject(PdfName.CONTENTS);
    if (object instanceof PRStream) {
        PRStream stream = (PRStream)object;
        byte[] data = PdfReader.getStreamBytes(stream);
        stream.setData(new String(data).replace("^(0?[1-9]|[12][0-9]|3[01])[\\/\\-](0?[1-9]|1[012])[\\/\\-]\\d{4}$", getData()).getBytes());
    }
    PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(dest));
    stamper.close();
    reader.close();
例如,它应该从2018年12月12日更改为我使用getData()方法获得的日期,但在新的pdf中仍然是2018年12月12日,因此我认为regex不起作用。 您有什么解决方案吗?

不支持正则表达式,它将尝试逐字替换您的字符串,请注意
string的源代码中的#replace

public String replace(CharSequence target, CharSequence replacement) {
    return Pattern.compile(target.toString(), Pattern.LITERAL).matcher(
            this).replaceAll(Matcher.quoteReplacement(replacement.toString()));
}

您正在寻找的方法是或,这两种方法都将regex作为输入

工作示例:
如果你想要正则表达式替换,你应该
replaceAll
method。对于未来的问题,旁注:“它不起作用”没有多大帮助。您至少应该告诉我们它以什么方式不起作用,即您预期会发生什么以及会发生什么。您还应该提供-您在此处显示的90%以上的代码是冗余的,与您的问题无关。即使使用replaceAll和replaceFirst编辑Post,它也不会work@MassimoSimone它如何“不起作用”?当我使用
replaceAll
创建一个最小的正则表达式示例时,输入数据为
12/12/2018
,它可以正常工作。是的,我知道,我在线测试了正则表达式,它可以工作,但在我的java程序中,它不会改变我pdf中的字符串,如果我设置一个静态日期,发现它工作正常。@Massimosone你把这个静态日期放在哪里?而不是
新字符串(数据)
?或者代替
getData()
?代替regex,比如stream.setData(新字符串(data).replaceAll(“12/12/2018”,getData()).getBytes());
String regex = "^(0?[1-9]|[12][0-9]|3[01])[\\/\\-](0?[1-9]|1[012])[\\/\\-]\\d{4}$";
String date = "12/12/2018";

System.out.println(date); // Prints 12/12/2018
date = date.replaceAll(regex, "myNewValue");
System.out.println(date); // Prints myNewValue