Java регулярное выражение для <и "!"в первой строке - PullRequest
0 голосов
/ 08 марта 2012

Я использую этот код, чтобы получить HTML исходный код и информацию, которую я хотел.Я просто проверял, вернет ли он меня <и "!"для первой строки.Однако это не работает! </p>

    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 Ответ

3 голосов
/ 08 марта 2012

Это потому, что вы перепутали обратную косую черту \ с прямой косой чертой /.Первые используются для экранирования специальных символов.Итак, измените это:

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

на следующее:

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

Тем не менее, < и ! на самом деле не имеют никакого особого значения в этом контексте, поэтому выможете просто написать:

                regex("<!",line);

, если хотите.

Также обратите внимание, что приведенное выше регулярное выражение соответствует двухсимвольной подстроке <!.Что-то в вашем вопросе заставляет меня думать, что вы, возможно, действительно хотите сопоставить односимвольные подстроки < и ! по отдельности?Если это так, вы можете использовать синтаксис ...|... для указания нескольких альтернативных шаблонов:

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

или синтаксис [...] для указания класса символов:

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

(в этом случае эти два синтаксиса эквивалентны).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...