Как извлечь подстроку из строки в Java - PullRequest
0 голосов
/ 24 января 2012

У меня есть строка, как показано ниже:

<script language="JavaScript" type="text/javascript" src="http://dns.net/adj/myhost.com/index;size=5x10;zipc=12345;myzon=north_west;|en;tile=10;ord=7jkllk456?"></script>

Я хочу получить доступ к тому, что находится между src=" и ">. Я разработал код примерно так:

        int i=str.indexOf("src=\"");
        str=str.substring(i+5);
        i=str.indexOf("\">");
        str=str.substring(0,i);
        System.out.println(str);

Знаете ли вы, если это правильный путь? Меня беспокоит только то, что иногда может быть пробел между src и = или пробел между " и >, и в этом случае мой код не будет работать, поэтому я подумал использовать Regex. Но я не могу придумать какое-либо регулярное выражение. Есть ли у вас какие-либо предложения?

Ответы [ 5 ]

2 голосов
/ 24 января 2012

Это будет работать, но вы должны взглянуть на Регулярные выражения , они предоставляют мощный способ определения шаблонов и извлечения текста соответствующим образом.

1 голос
/ 24 января 2012

Если вы не хотите беспокоиться о регулярных выражениях, вы можете сделать это:

testString.split("src\\=")[1].split(">")[0]);

Конечно, это не решает другие ваши проблемы с другими форматами, но вы все равно можете использовать применимое регулярное выражение (например, ответ RanRag) с String.split () вместо 5 строк кода, которые вы использовали.

1 голос
/ 24 января 2012

Вы также можете попробовать это регулярное выражение src\s+"[=](.*)"\s+>.

Позволяет разбить его на

src соответствует src в строке

\s+ искать один илиболее одного вхождения пробела

[=] соответствует равному

(.*) нулю или более одного вхождения текста до "\s>

1 голос
/ 24 января 2012

Возможно, это излишне для вашей ситуации, но вы можете рассмотреть возможность использования HTML-парсера.Это позаботится обо всех проблемах форматирования документа и позволит вам получить доступ к тегам и атрибутам стандартным способом.Хотя Regex может работать для простого HTML, как только все усложняется, у вас могут возникнуть проблемы (ложные совпадения или пропущенные совпадения).

Вот список доступных анализаторов с открытым исходным кодом для Java: http://java-source.net/open-source/html-parsers

0 голосов
/ 24 января 2012

Если в нужной строке не может быть экранированных двойных кавычек, попробуйте следующее выражение: src="([^"]*)". Это будет src=" и совпадет с чем угодно до первой следующей " и захватит текст между двойными кавычками в группу 1 (группа 0 всегда является всей совпадающей строкой).

Так как пробелы вокруг = разрешены, вы можете расширить выражение до src\s*=\s*"([^"]*)".

Просто предостережение: HTML не является обычным языком, и поэтому его нельзя анализировать с помощью регулярных выражений. Для простых случаев, подобных этому, это нормально, но не попадайтесь в ловушку и думайте, что вы можете анализировать более сложные html-структуры.

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