Java 无法知道如何使用替换

Java 无法知道如何使用替换,java,regex,Java,Regex,我有一根像下面这样的线 <a name="1.F"></a> 结果:这里我得到的结果是介于两者之间的结果** 搜索结果: **<a name="1.F">**</a> 请让我知道,我们如何才能得到预期的结果 谢谢你给我举个例子,为什么不找一个简单的解决方案呢?比如:你的价值是用双引号括起来的——所以只要利用这些知识,抓住这两个“引号”之间的一切 import java.util.regex.*; 公共类RegexTest{ 公共静态void m

我有一根像下面这样的线

<a name="1.F"></a>
结果:这里我得到的结果是介于两者之间的结果**

搜索结果:

**<a name="1.F">**</a>
请让我知道,我们如何才能得到预期的结果


谢谢你给我举个例子,为什么不找一个简单的解决方案呢?比如:你的价值是用双引号括起来的——所以只要利用这些知识,抓住这两个“引号”之间的一切

import java.util.regex.*;
公共类RegexTest{
公共静态void main(字符串参数[]){
String s=“以便快速获取该引号的位置


另一方面,如果您的示例只是简化了,而您的实际输入非常复杂(如:真正的HTML或XML)…那么首先就不要使用正则表达式(请参见原因).

举个例子,你为什么不找一个简单的解决方案呢?比如:你的价值是用双引号括起来的——所以只要运用这些知识,抓住这两个“引号”之间的所有东西就行了

import java.util.regex.*;
公共类RegexTest{
公共静态void main(字符串参数[]){
String s=“以便快速获取该引号的位置

另一方面,如果您的示例只是简化了,而您的实际输入非常复杂(如:真正的HTML或XML)…那么首先就不要再使用正则表达式了(请参见原因)。

更新

@user387294我刚刚用你的模式测试了我的代码,它给出了输出
1.F
。所以我怀疑这个bug来自你的Java代码

    String s = "**<a name=\"1.F\">**</a>";
    Pattern p = Pattern.compile("<a name=\"(\\d)+(\\.)(\\w)+\"?>");
    Matcher m = p.matcher(s);
    while (m.find()) {
        System.out.println(m.group(1) + m.group(2) + m.group(3));
    }
String s=“**”;
Pattern p=Pattern.compile(“”);
匹配器m=匹配器p;
while(m.find()){
系统输出println(m.group(1)+m.group(2)+m.group(3));
}
=>>1.F

已更新

@user387294我刚刚用你的模式测试了我的代码,它给出了输出
1.F
。所以我怀疑这个bug来自你的Java代码

    String s = "**<a name=\"1.F\">**</a>";
    Pattern p = Pattern.compile("<a name=\"(\\d)+(\\.)(\\w)+\"?>");
    Matcher m = p.matcher(s);
    while (m.find()) {
        System.out.println(m.group(1) + m.group(2) + m.group(3));
    }
String s=“**”;
Pattern p=Pattern.compile(“”);
匹配器m=匹配器p;
while(m.find()){
系统输出println(m.group(1)+m.group(2)+m.group(3));
}

=>>1.F

使用
[^”]
而不是
\w
?此外,您可能需要组内的量词。您的
(\w)+
一直匹配到最后。使用
[^”]
字符串是否始终采用这种格式?是否确实需要使用
\d+\.\w+
?请注意,在双引号之间提取字符串所需的只是两个字符串方法。使用
拆分并获取第二项也是一个选项。使用
[^”]
而不是
\w
?此外,您可能希望组中的量词。您的
(\w)+
一直匹配到最后。请使用
[^]
字符串是否始终采用这种格式?是否确实需要使用
\d+\.\w+
?请注意,在双引号之间提取字符串所需的只是几个字符串方法。使用
拆分
获取第二项也可能是一个选项。嗨@GhostCat,这似乎不起作用,因为
*
将一直被捕获到
,而且我在验证了这一点后发布了此消息。:@GhostCat,您的正则表达式将捕获
所以它是正确的。结果是在第一个捕获组中。您好@GhostCat,这似乎不起作用,因为
*
将一直捕获到
,而且我在验证后发布了此消息。:@GhostCat,您的正则表达式将捕获
"
所以它是正确的。结果是在第一个捕获组。嗨@AntonyDao,你能解释一下幕后发生了什么吗。ThansksHi@user387294在测试了你的模式后,我认为你的是正确的。请看我更新的答案。嗨@AntonyDao,你能解释一下幕后发生了什么吗。ThansksHi@user387294在t之后测试你的模式,我认为你的是正确的。请看我更新的答案。
1.F
import java.util.regex.*;

public class RegexTest {

  public static void main(String args[]) {
    String s = "<a name=\"1.F\"></a>";
    Pattern p = Pattern.compile("<a name=\\\"(.*)\\\"");
    Matcher m = p.matcher(s);
    if (m.find()) {
      System.out.println(m.group(1));
    }
  }
}   
    String s = "**<a name=\"1.F\">**</a>";
    Pattern p = Pattern.compile("<a name=\"(\\d)+(\\.)(\\w)+\"?>");
    Matcher m = p.matcher(s);
    while (m.find()) {
        System.out.println(m.group(1) + m.group(2) + m.group(3));
    }