我需要能够创建一个正则表达式,它将搜索Java中的任何字符串并匹配此特定表达式。
Reg匹配: ./ ADD NAME =< ---我需要在我读入文件的任何字符串中匹配此正则表达式,它通常位于1到13位置
我在任何字符串的前10个字符中寻找这个,因为我必须返回等号后面的名称来创建一个文件名,所以整行看起来如下所示。
问题:为什么我的表达式在任何字符串中都不匹配?
文件行:
./ ADD NAME=FILE02
...more records would go here...
./ ADD NAME=FILE332
...more records would go here...
./ ADD NAME=FILE3
...more records would go here...
./ ADD NAME=FILE-1A
...more records would go here...
代码:
private void locatedFileName(String s) {
Pattern p = Pattern.compile("./ ADD name=");
Matcher m = p.matcher(s);
boolean b = m.matches();
if (b) {
System.out.println("True");
} else {
System.out.println("False");
}
}
**private void locatedFileName(String s) {
if (s.matches("./ ADD name=")) {
System.out.println("True");
} else {
System.out.println("False");
}
}**
所有代码:
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
public class test {
test(){
}
private void locatedFileName(String s) {
if (s.matches("./ ADD name=")) {
System.out.println("True");
} else {
System.out.println("False");
}
}
private void testReadTextFile() {
try {
BufferedReader reader = new BufferedReader(new FileReader("C:\\Users\\itpr13266\\Desktop\\TestFile.txt"));
String line = null;
//Will read through the file until EOF
while ((line = reader.readLine()) != null) {
System.out.println(line);
locatedFileName(line); //test to see if the "./ Add name=" is found in any of the strings
}
} catch (IOException e) {
System.out.println("Try-Catch Message - " + e.getMessage());
e.printStackTrace();
}
}
public static void main(String[] a) {
test t = new test();
t.testReadTextFile();
}
}
我尝试过的最新代码:
代码:
final String REGEX = ("(?i)\\./\\s+ADD\\s+NAME\\s*=");
final String REGEXtemp = ("\\s+ADD\\s");
//Pattern p = Pattern.compile(REGEX);
Pattern p = Pattern.compile(REGEXtemp);
Matcher m = p.matcher(s);
boolean b = m.matches();
if (b) {
System.out.println("True");
} else {
System.out.println("Reg not found in string!");
}
答案 0 :(得分:2)
信息 -
尝试这样来获取子字符串:
Pattern patt = Pattern.compile("(?i)\\./\\s+ADD\\s+name\\s*=");
Matcher m = patt.matcher( s );
while (m.find())
// or if (m.find())
{
}
匹配我认为必须匹配整个字符串(gotcha)
匹配整个事情。为此使用此正则表达式:
Pattern.compile("(?si).*?\\./\\s+ADD\\s+name\\s*=.*");
你的正则表达式应该匹配,即使你使用的点metachar也是如此 可能有标签而不是空格。
我猜你可以用空格类替换空格文字
这样的事情:
编辑 - 哦,你也需要不区分大小写
因为ADD,名称与ADD,NAME不匹配
# Pattern.compile("(?i)\\./\\s+ADD\\s+name\\s*=");
(?i) \./ \s+ ADD \s+ name \s* =
扩展了带注释的正则表达式
# Pattern.compile("(?i)\\./\\s+ADD\\s+name\\s*=");
(?i) # Case insensitive modifier
# for all subsequent alpha literals
\. # literal dot
/ # literal forward slash
\s+ # 1 or more whitespace characters
ADD # 'ADD'
\s+ # 1 or more whitespace characters
name # 'name'
\s* # 0 or more whitespace characters
= # '='