Может ли регулярное выражение Java соответствовать строке, которая существует или нет? - PullRequest
0 голосов
/ 15 апреля 2011

Я хочу сопоставить следующие строки:

<a href="http://xyz">xyz</a>
<a href="https://xyz">xyz</a>
<a href="xyz">xyz</a>

и я попытался использовать регулярное выражение, но не смог:

<a href="((http://|https://|).+)">\1</a>

Какое правильное решение для достижения этой цели? Спасибо!

Ответы [ 2 ]

5 голосов
/ 15 апреля 2011

Следующее регулярное выражение делает это:

<a\s+href="(?:https?://)?([^"]+)">\1</a>

Объяснение:

<a\s+href="       # match `<a href="`
(?:https?://)?    # optionally match `http://` or `https://`
([^"]+)           # match one or more chars other than `"`, and store it in group 1
">                # match `">`
\1                # match the same as group 1
</a>              # match `</a>`

Демонстрация Java:

public class Main {
    public static void main(String[] args) {
        String[] tests = {
                "<a href=\"http://xyz\">xyz</a>",
                "<a href=\"https://xyz\">xyz</a>",
                "<a href=\"xyz\">xyz</a>",
                "<a href=\"xyz\">xyzzz</a>"
        };
        String regex = "<a\\s+href=\"(?:https?://)?([^\"]+)\">\\1</a>";
        for(String test : tests) {
            System.out.println(test.matches(regex));
        }
    }
}

печатает:

true
true
true
false
0 голосов
/ 15 апреля 2011

Я думаю, это то, что вам нужно:

<a href="(https?://)?(.+)">\2</a>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...