Java 使用正则表达式进行模式匹配

Java 使用正则表达式进行模式匹配,java,regex,servlets,Java,Regex,Servlets,我正在读取一个文本文件,并试图将一个模式与一行文本文件相匹配 例如,如果在我的文本文件中有一行看起来像IT&&HOD&&name'S.Roy',那么在我的程序中,我试图将类似的模式存储在String z变量中,然后将z与文本文件模式匹配,以获得输出为S.Roy 当我存储在不同的字符串中,如string b=“IT&&HOD&&name.*”并使用正则表达式将b与文本文件行匹配时,结果是正确的,即S.Roy 但是,当字符串z(与b存储的值相同)与文本文件行匹配时,它会显示“未找到匹配项” 对于任何

我正在读取一个文本文件,并试图将一个模式与一行文本文件相匹配

例如,如果在我的文本文件中有一行看起来像
IT&&HOD&&name'S.Roy'
,那么在我的程序中,我试图将类似的模式存储在
String z
变量中,然后将
z
与文本文件模式匹配,以获得输出为
S.Roy

当我存储在不同的字符串中,如
string b=“IT&&HOD&&name.*”
并使用正则表达式将b与文本文件行匹配时,结果是正确的,即
S.Roy

但是,当
字符串z
(与
b
存储的值相同)与文本文件行匹配时,它会显示
“未找到匹配项”

对于任何查询
“谁是它的负责人”
String z
将导致
IT&&HOD&&name.

在我的
database.txt
中,它被存储为
it&&HOD&&name'S.Roy'
,因此尝试匹配这两个属性应该会导致
S.Roy
,但它没有这样做。请帮助。

我不确定我是否理解您的代码,但以下是您应该做的事情,以便从您的模式中获得以下格式的三部分:

[category]&&[title]&&name'[name]'

为了仅查找行的格式是否正确(并且只有a-z upper/lower与.and[space]一起用于名称),此正则表达式将实现以下功能:

^[A-Za-z]+&{2}[A-Za-z]&{2}name'[ .A-Za-z]+'$
对于提取,不需要正则表达式,特别是对于获取前两部分,因为您有一个分隔符
“&&”
。第二部分可以使用regex,但简单的替换可能更容易使用。假设您希望实际提取数据,则根本不需要正则表达式

这就是我将如何从行中提取这些值并验证:

String category;
String title;
String name;
String line = /* populated from where ever */
//validate line is in correct format
if(str.matches("^[A-Za-z]+&{2}[A-Za-z]&{2}name'[A-Za-z]+'$")){
    String[] parts = str.split("&&");
    category = parts[0];
    title = parts[1];
    String temp = str.replace("name'","");
    name = temp.replace('\'',"");
}

你的问题不是很清楚,但我希望这至少为你指明了正确的方向。祝你好运

找到匹配项的最终结果是什么?您正在尝试分析/分隔行吗?我正在尝试读取文本文件,以找到与字符串z的值相同的模式,然后在文本文件中打印“”中的任何内容。例如,在我的文本文件中,我存储了它&&HOD&&name'S.Roy'现在我的z结果模式IT&&HOD&&name.*与这些模式匹配,我希望最终结果为S.Roy,但找不到匹配的结果。但是,当我将相同的z值存储在另一个字符串中,比如string b=“IT&&HOD&&name.*”,现在尝试匹配b和textfile模式,然后它会给出所需的结果。我的问题是,无论字符串b的值是什么,相同的结果来自字符串z,那么为什么与b匹配的模式会给出结果,而与z匹配的模式会给出“未找到匹配”。请帮忙!!!你能再举几个数据字符串的例子吗?它总是
“it&&HOD&&name…”
?另外,请张贴您想要提取的确切数据?你是想拔出来,然后是霍德,然后是名字?您的代码不太清楚。您完全有权回滚我的编辑,但是,如果您提供自己的另一种编辑方式,使您的英语易懂,代码格式清晰,那么您获得有用答案的机会将大大提高。请帮我做一件事——如果word2=IT,word1=HOD,那么字符串z=word2.toString()+“&&&”+word1.toString()+“&&&”+“名称。*”+“\n”;和字符串y=“IT&&HOD&&name.*”相同。例如,字符串y和z的值是否相同?@SoumyasreeBiswas抱歉,我不明白你的问题。我想问的是,无论我如何编写我的z字符串,结果是否与我的字符串y相同?你需要使用更好的变量名称,以实际描述它们的用途。你的代码充满了这样的味道。
字符串z
代表什么?你的代码中没有
y
,我的例子中也没有。谢谢大家,实际上我无法解释我的问题,谢谢你的支持,事实上,这只是一个新词造成的问题,现在我把它修好了,我问了一些愚蠢的问题,弄得一团糟。谢谢你。
String category;
String title;
String name;
String line = /* populated from where ever */
//validate line is in correct format
if(str.matches("^[A-Za-z]+&{2}[A-Za-z]&{2}name'[A-Za-z]+'$")){
    String[] parts = str.split("&&");
    category = parts[0];
    title = parts[1];
    String temp = str.replace("name'","");
    name = temp.replace('\'',"");
}