正则表达式搜索字符串?

时间:2014-01-30 17:30:23

标签: java regex

我需要能够创建一个正则表达式,它将搜索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!");
    }

1 个答案:

答案 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
 =         # '='