Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/347.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.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,我有一个包含自动关闭锚定标记的文件 <p><a name="impact"/><span class="sectiontitle">Impact</span></p> <p><a name="Summary"/><span class="sectiontitle">Summary</span></p> package mypack; import java.io.*

我有一个包含自动关闭锚定标记的文件

  <p><a name="impact"/><span class="sectiontitle">Impact</span></p>
<p><a name="Summary"/><span class="sectiontitle">Summary</span></p>
   package mypack;
import java.io.*;
import java.util.regex.*;


public class AnchorIssue {

    static int count=0;
    public static void main(String[] args) throws IOException {
        Pattern pFinder = Pattern.compile("<a name=\\\".*\\\"(\\/)>(.*)(<)");
        BufferedReader r = new BufferedReader
                  (new FileReader("D:/file.txt"));
                  String line;
                  while ((line =r.readLine()) != null) {
                     Matcher m1= pFinder.matcher(line);
                     while (m1.find()) {
                        int start = m1.start(0);
                        int end = m1.end(0);
                        ++count;

//                  Use CharacterIterator.substring(offset, end);
                        String actual=line.substring(start, end);
                        System.out.println(count+"."+"Actual String :-"+actual);

                         actual.replace(m1.group(1),"");
                         System.out.println(actual);
                         actual.replaceAll(m1.group(3),"</a><");
                         System.out.println(actual);

//              Use CharacterIterator.substring(offset, end);
                    System.out.println(count+"."+"Replaced"+actual);


      }

} 
    r.close();            
    }
}
影响

总结

我想更正下面的标签

    <p><a name="impact"><span class="sectiontitle">Impact</span></a></p>
<p><a name="Summary"><span class="sectiontitle">Summary</span></a></p>
影响

总结

我写这段代码是为了查找和替换不正确的锚标记

  <p><a name="impact"/><span class="sectiontitle">Impact</span></p>
<p><a name="Summary"/><span class="sectiontitle">Summary</span></p>
   package mypack;
import java.io.*;
import java.util.regex.*;


public class AnchorIssue {

    static int count=0;
    public static void main(String[] args) throws IOException {
        Pattern pFinder = Pattern.compile("<a name=\\\".*\\\"(\\/)>(.*)(<)");
        BufferedReader r = new BufferedReader
                  (new FileReader("D:/file.txt"));
                  String line;
                  while ((line =r.readLine()) != null) {
                     Matcher m1= pFinder.matcher(line);
                     while (m1.find()) {
                        int start = m1.start(0);
                        int end = m1.end(0);
                        ++count;

//                  Use CharacterIterator.substring(offset, end);
                        String actual=line.substring(start, end);
                        System.out.println(count+"."+"Actual String :-"+actual);

                         actual.replace(m1.group(1),"");
                         System.out.println(actual);
                         actual.replaceAll(m1.group(3),"</a><");
                         System.out.println(actual);

//              Use CharacterIterator.substring(offset, end);
                    System.out.println(count+"."+"Replaced"+actual);


      }

} 
    r.close();            
    }
}
包mypack;
导入java.io.*;
导入java.util.regex.*;
公共类主播{
静态整数计数=0;
公共静态void main(字符串[]args)引发IOException{

Pattern pFinder=Pattern.compile((.*)(您的问题是贪婪。也就是说,
*“
将匹配该行中最后一个
之前的所有内容。对此有两个修复方法。 两个修复程序都将替换此行:

Pattern pFinder = Pattern.compile("<a name=\\\".*\\\"(\\/)>(.*)(<)");

Pattern pFinder=Pattern.compile(“.

您的问题是贪婪。也就是说,
*”
将匹配该行中最后一个
之前的所有内容。对此有两个修复方法。 两个修复程序都将替换此行:

Pattern pFinder = Pattern.compile("<a name=\\\".*\\\"(\\/)>(.*)(<)");

Pattern pFinder=Pattern.compile(“.

由于文件结构似乎是“恒定的”,因此最好将问题简化为简单的替换,而不是复杂的html匹配。在我看来,您似乎对锚定标记的内容不太感兴趣,所以只需替换
/>,因为文件结构似乎是”常量”,将问题简化为简单的替换而不是复杂的html匹配可能会更好。在我看来,您对锚定标记的内容并不感兴趣,所以只需使用下面的代码替换
/>,我就能找到并替换所有自关闭的锚定标记

    package mypack;
import java.io.*;
import java.util.regex.*;


public class AnchorIssue {

    static int count=0;
    public static void main(String[] args) throws IOException {
        Pattern pFinder = Pattern.compile("<a name=\\\".*?\\\"(\\/><span)(.*)(<\\/span>)");
        BufferedReader r = new BufferedReader
                  (new FileReader("file.txt"));
                  String line;
                  while ((line =r.readLine()) != null) {
                     Matcher m1= pFinder.matcher(line);
                     while (m1.find()) {
                        int start = m1.start(0);
                        int end = m1.end(0);
                        ++count;

//                  Use CharacterIterator.substring(offset, end);
                        String actual=line.substring(start, end);
                        System.out.println(count+"."+"Actual String : "+actual);


                        actual= actual.replaceAll(m1.group(1),"><span");
                     System.out.println("\n");

                        actual= actual.replaceAll(m1.group(3),"</span></a>");

                    System.out.println(count+"."+"Replaced : "+actual);
                    System.out.println("\n");
                    System.out.println("---------------------------------------------------");


      }

} 
    r.close();            
    }
}
包mypack;
导入java.io.*;
导入java.util.regex.*;
公共类主播{
静态整数计数=0;
公共静态void main(字符串[]args)引发IOException{

Pattern pFinder=Pattern.compile(“使用下面的代码,我能够找到并替换所有自关闭的锚标记

    package mypack;
import java.io.*;
import java.util.regex.*;


public class AnchorIssue {

    static int count=0;
    public static void main(String[] args) throws IOException {
        Pattern pFinder = Pattern.compile("<a name=\\\".*?\\\"(\\/><span)(.*)(<\\/span>)");
        BufferedReader r = new BufferedReader
                  (new FileReader("file.txt"));
                  String line;
                  while ((line =r.readLine()) != null) {
                     Matcher m1= pFinder.matcher(line);
                     while (m1.find()) {
                        int start = m1.start(0);
                        int end = m1.end(0);
                        ++count;

//                  Use CharacterIterator.substring(offset, end);
                        String actual=line.substring(start, end);
                        System.out.println(count+"."+"Actual String : "+actual);


                        actual= actual.replaceAll(m1.group(1),"><span");
                     System.out.println("\n");

                        actual= actual.replaceAll(m1.group(3),"</span></a>");

                    System.out.println(count+"."+"Replaced : "+actual);
                    System.out.println("\n");
                    System.out.println("---------------------------------------------------");


      }

} 
    r.close();            
    }
}
包mypack;
导入java.io.*;
导入java.util.regex.*;
公共类主播{
静态整数计数=0;
公共静态void main(字符串[]args)引发IOException{

Pattern pFinder=Pattern.compile("嗯,在这篇文章中,有一个很好的答案是关于用正则表达式解析HTML:这通常是正确的。但是,在一些边缘情况下,比如这一个,你可以使用正则表达式来帮助你编辑文件。另外,一些正则表达式引擎可以处理递归。我知道,这在理论上不再是常规的。不过,它们是正则表达式。这是我写的关于这一点的文章主题:嗯,在这篇文章中,有一个很好的答案是关于用正则表达式解析HTML:这通常是正确的。但是,在一些边缘情况下,比如这一个,你可以使用正则表达式来帮助你编辑文件。另外,一些正则表达式引擎可以处理递归。我知道,理论上这不再是常规的。不过,它们是正则表达式。这是我的writeup ab我们来谈谈这个话题: