Android RegEx не находит совпадений - PullRequest
1 голос
/ 25 октября 2011

Я пытаюсь использовать регулярные выражения для декодирования некоторого HTML-кода, получаемого с веб-страницы.Я хочу преобразовать некоторые теги <iframe> в ссылки.

Код, который я использую, должен работать нормально в зависимости от меня и некоторых тестовых программ, однако, когда я запускаю его на своем устройстве Android, он не находит совпадений.(где это происходит в тестовых программах).

Я использую следующее регулярное выражение (имейте в виду, что я пишу код на Java, поэтому мне также нужно экранировать escape-символ):

String regularExpression = "<iframe.+?src=\\\\?(\\S+).+?(><\\\\?/iframe>|\\\\?/>)";
String replacement = "<a href=$1>Youtube</a>";

input.replaceAll(regularExpression, replacement);

Из того, что я могу из этого извлечь, следует заменить все теги <iframe>, имеющие атрибут src, на гиперссылки с этим источником.Однако, когда я передаю следующий ввод, он ничего не делает с ним:

<iframe src=\"http:\/\/www.youtube.com\/embed\/s6b33PTbGxk\" frameborder=\"0\" width=\"500\" height=\"284\"><\/iframe>

Ответ - это просто тот же самый текст, только с удаленными escape-символами:

<iframe src="http://www.youtube.com/embed/s6b33PTbGxk" frameborder="0" width="500" height="284"></iframe>

Может кто-нибудь помочь мне и объяснить, что я делаю не так?Я только начал изучать регулярные выражения вчера, но я просто не могу понять, почему это не работает.

Ответы [ 2 ]

2 голосов
/ 25 октября 2011

Метод String.replaceAll не изменяет строку.Это невозможно, потому что строки неизменны .Вместо этого он возвращает новую строку с результатом.Вам нужно присвоить этот результат чему-то:

String result = input.replaceAll(regularExpression, replacement);

Также не используйте регулярные выражения для разбора HTML.

0 голосов
/ 25 октября 2011
String resultString = subjectString.replaceAll("(?=<(iframe)\\s+src\\s*=\\s*(['\"])(.*?)\\2[^>]*>).*?</\\1>", "<a href=$3>Youtube</a>");

Это должно работать. В дополнение к @Mark Byers обратите внимание, что ваше регулярное выражение не соответствует вашему вводу, даже с удаленными (двойными) обратными слешами.

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