2014-01-30 294 views
0

我需要能够创建一个正则表达式来搜索Java中的任何字符串并匹配这个特定的表达式。正则表达式搜索字符串?

寄存器匹配: ./添加名称= < ---我需要匹配任何字符串正则表达式,我读入文件,并且它通常会通过13

在位置1我要找对于任何字符串的前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

什么你的问题确切吗? – javamonkey79

+2

别忘了'.'和'/'是特殊字符,需要转义 –

+0

正则表达式在这里似乎过分了。为什么不测试一下字符串的开头是否与搜索字符串匹配,然后返回字符串的其余部分? – ooga

回答

2

信息 -
尝试像这样得到的字符串:

Pattern patt = Pattern.compile("(?i)\\./\\s+ADD\\s+name\\s*="); 
Matcher m = patt.matcher(s); 
while (m.find()) 
// or if (m.find()) 
{ 

} 

较量,我认为有整个字符串(疑难杂症)
匹配整个事情相匹配。对于使用这个表达式:

Pattern.compile("(?si).*?\\./\\s+ADD\\s+name\\s*=.*"); 

你的正则表达式应该匹配,即使有元字符,你已经使用了点。
有可能有选项卡,而不是空间。

我想你可以用空白类替换空格字面。
事情是这样的:
编辑 - 哦,你需要区分大小写太
因为ADD,名称不匹配添加,命名

# 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 
=   # '=' 
+0

试过这个,它仍然不会匹配。只是为了确定我理解这里的表达。 +仅用于将每个部分附加在一起。 (?i)是开头的标签。 –

+0

@Doug Hauf - 已添加,正则表达式解释。我不知道为什么它不起作用,但它应该。什么是你正在使用的确切引用的字符串?您是否在旧正则表达式所在的所有位置使用它? – sln

+0

我不太了解Java,但是,可能是您使用了错误的匹配功能。看看是否有'匹配'之一。一些langs使用自动满线匹配,它必须匹配整条线。有些只匹配子字符串。 – sln

相关问题