Java字符串和正则表达式匹配

4

我想在一个字符串中查找由字符串和正则表达式连接而成的另一个字符串。如果第一个字符串存在于第二个字符串中,则我希望获取匹配短语的起始和结束地址。对于以下代码,我想在"baby_NN accessories_NNS India_NNP is_VBZ an_DT online_JJ shopping_NN portal_NN "中搜索"baby accessories India",并且希望以"baby_NN accessories_NNS India_NNP"作为结果。

import java.io.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class RegexMatching {


public static void main(String aaa[])throws IOException
{

        String line="baby accessories India";
        String []str=line.split("\\ ");

        String temp="";

        int i,j;
        j=0;

        String regEx1 = "([A-Z]+)[$]?";

        for(i=0;i<str.length;i++)
            temp=temp+str[i]+"_"+regEx1+" ";


        String para2="baby_NN accessories_NNS India_NNP is_VBZ an_DT online_JJ shopping_NN portal_NN ";
        Pattern pattern1 = Pattern.compile(temp);
        Matcher matcher1 = pattern1.matcher(para2);

        if (para2.matches(temp)) {
            i = matcher1.start();
            j = matcher1.end();
            String temp1=para2.substring(i,j);
            System.out.println(temp1);

        }
        else {
            System.out.println("Error");
        }

}
}

那么,你尝试了什么?你的代码有什么结果?是“错误”还是其他什么?你发布的代码甚至无法编译。 - Stephan
@Stephan:我犯了一个小错误,我使用了matcher而不是matcher1..现在它已经正确了..:)..输出是错误 - anjaneypandey
1个回答

3

尝试使用Matcher#find()

if (matcher1.find()) 

使用其他方法代替String#matches()来匹配部分字符串而不是整个字符串。

if (para2.matches(temp))

输出:

baby_NN accessories_NNS India_NNP  

又有一个变化

if (matcher1.find()) {
    i = matcher1.start();
    j = matcher1.end();
    String temp1 = para2.substring(i, j-1); // Use (j-1) to skip last space character
    System.out.println(temp1);
} 

并且在输入字符串中使用Pattern.quote()来转义任何特殊字符。 - pingw33n
是的,您说得对。如果尝试匹配正则表达式模式中已存在的特殊字符,则必须转义所有这些字符。 - Braj

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接