Java正则表达式<和"!"在第一行

时间:2012-03-08 16:16:31

标签: java regex

我使用此代码获取html源代码和我想要的信息。我只是测试它是否会返回我<和“!”为第一行。但是,这不起作用!

    import java.io.*;
    import java.net.URL;
    import java.util.regex.*;

    public class url
    {
        public static BufferedReader read(String url) throws Exception {
            return new BufferedReader(
                new InputStreamReader(
                    new URL(url).openStream()));
        }

        public static void main (String[] args) throws Exception{
            BufferedReader reader = read(args[0]);
            String line = reader.readLine();

            while(line != null) {
                System.out.println(line);
                line = reader.readLine(); 
                regex("//<//!",line);
                }
            }   

        public static void regex(String regex, String check){
                Pattern checkregex =Pattern.compile(regex);
                Matcher regexMatcher = checkregex.matcher(check);
                if(regexMatcher.find()==false)
                    return;

                while(regexMatcher.find()){
                    if(regexMatcher.group().length() !=0) {
                        System.out.println(regexMatcher.group().trim());
                    }
                }                   
        }    
    }

1 个答案:

答案 0 :(得分:3)

那是因为你把反斜杠\与正斜杠/混淆了。前者是用于逃避特殊字符的东西。所以,改变这个:

                regex("//<//!",line);

到此:

                regex("\\<\\!",line);

那就是说,<!在这种情况下实际上没有任何特殊含义,所以你可以写:

                regex("<!",line);

如果您愿意。

另请注意,上述正则表达式匹配双字符子串<!。关于你的问题的一些事情让我觉得你可能真的想要分别匹配单字符子串<!?如果是这样,您可以使用...|...语法指定多个替代模式:

                regex("<|!",line);   // matches whatever matches < or matches !

或用于指定字符类的[...]语法:

                regex("[<!]",line);  // matches a character that is either < or !

(在这种情况下,这两种语法是等价的。)