在java中使用正则表达式搜索字符串

在java中使用正则表达式搜索字符串,java,regex,string,search,substring,Java,Regex,String,Search,Substring,我想知道如何检索字符串数组中存在的更多类似模式,而不管字符串长度和存在多少类似模式 例如: 哈利·詹姆斯·波特也被称为波特先生。波特在哈格沃兹很有名。哈利·詹姆斯·波特也叫波特先生 我需要找到哈利·詹姆斯·波特和波特先生之间的内容: Harry James Potter (.*?) Mr\.Potter 输出应该是 亦称为 也叫 有人能帮我吗 这是我的密码: import java.util.regex.Pattern; import java.util.regex.Matcher; publ

我想知道如何检索字符串数组中存在的更多类似模式,而不管字符串长度和存在多少类似模式

例如:

哈利·詹姆斯·波特也被称为波特先生。波特在哈格沃兹很有名。哈利·詹姆斯·波特也叫波特先生

我需要找到哈利·詹姆斯·波特和波特先生之间的内容:

Harry James Potter (.*?) Mr\.Potter
输出应该是

亦称为 也叫 有人能帮我吗

这是我的密码:

import java.util.regex.Pattern;
import java.util.regex.Matcher;
public class RegexTestHarness {
    public static void main(String[] args){

        String regex = "Harry James Potter (.*?) Mr.Potter";

        String strToSearch = "Harry James Potter also known as Mr.Potter. Harry       James Potter is famous as  Mr. Potter";

        Pattern pattern = Pattern.compile(regex, Pattern.CASE_INSENSITIVE);

        Matcher matcher = pattern.matcher(strToSearch);

        while (matcher.find()) {

            System.out.println("Text is at "+matcher.group()+"::"+matcher.start()+"::     "+matcher.end());
            System.out.println(matcher.groupCount());

            System.out.println(matcher.group(1));
        }
    }
}

这个正则表达式将拾取哈利·詹姆斯·波特和波特先生之间的任何内容:

Harry James Potter (.*?) Mr\.Potter
测试


根据您的正则表达式实现,您可能需要检索结果组1。

在编写正则表达式字符串时,请确保跳过Mr.Potter中的句点。另外,strToSearch中有随机空格,这会使您的正则表达式无法找到您想要的内容。此代码生成您提供的示例

try {
        String regex = "Harry James Potter (.*?) Mr\\.Potter";
        String strToSearch = "Harry James Potter also known as Mr.Potter. Potter is very famous in hagwards. Harry James Potter also called Mr.Potter.";
        Pattern pattern = Pattern.compile(regex, Pattern.CASE_INSENSITIVE);
        Matcher matcher = pattern.matcher(strToSearch);
        int start = 0;
        int count = 1;
        while (matcher.find(start)) {
            System.out.println(count + ". " + matcher.group(1));
            start = matcher.end();
            count++;
        }

    } catch(Exception ex) {
        ex.printStackTrace();
    }

你怎么确定哈利·詹姆斯·波特a.k.a是波特先生?可以是哈利先生或詹姆斯先生?好的。。我想这不是必需的,我只需要哈利·詹姆斯·波特和波特先生指定的字符串之间的模式,如果像哈利先生或詹姆斯先生这样的名字出现在文本中,我只需丢弃它们。你的正则表达式中有波特先生。这个应该逃脱\。特别匹配。而不是任何字符。您的代码当前生成了什么?即使没有指定\before。程序给我这样的输出groupcount产生1作为输出,检索到的组也被称为,但我需要两个输出,也被称为,并且是著名的asYes,这是正确的,但我需要所有这样的组存在,我已经尝试过使用那个正则表达式,但它会检索到从Harry James Potter到字符串末尾的整个文本匹配。请确保您使用的是。*?,而不仅仅是。*。您使用的是哪个版本的正则表达式?应该指定要检索的组非常感谢您。。真的很管用。您已经提出了一点不必要的空格,但是在我得到的文本流中,有很多不必要的空格,程序没有显示,但是存在,那么我应该怎么做才能确保检索到所有存在的模式??
also known as
also called