(Java / Regex) Как мне найти "http://" исключая" ​​src = "http://" - PullRequest
0 голосов
/ 26 декабря 2018

У меня проблема с регулярным выражением на Java, прямо сейчас.

У меня есть строка вроде:

img border=\"0\" src=\"http://www.stackoverflow.com http://nbsp;https://&lt

и я хочу создать регулярное выражение, которое находит только два "http://" исключая" ​​src= \ "http://" для замены" http://" на что-то другое.

String input = "border=\"0\" src=\"http://www.stackoverflow.com http://";
String regexStr = "(?!src=\"http://).*$";
Pattern pattern = Pattern.compile(regexStr);
Matcher matcher = pattern.matcher(input);
if (matcher.matches())
  System.out.println("String " + input + " has the word src=\"http:// in it ");
else
  System.out.println("String " + input + " hasn't the word src=\"http:// in it ");

Я ищу связанный с этим, но пока не нашел идеального ответа.

Любойкомментарий будет оценен.Спасибо.

Ответы [ 2 ]

0 голосов
/ 26 декабря 2018

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

(?<!src=")http://(www\.)?[-a-zA-Z0-9@:%._\+~#=]{2,256}\.[a-z]{2,6}\b([-a-zA-Z0-9@:%_\+.~#?&//=]*)

Один из многочисленных регулярных выражений, которые будут соответствовать URL, как определено в Что такое хорошее регулярное выражение для соответствия URL?

ВХОД:

border="0" src="http://www.stackoverflow.com 
123 http://abc123.com asg
123 http://uvw-avc132.be abc

МАТЧЕЙ:

http://abc123.com 
http://uvw-avc132.be

DEMO: https://regex101.com/r/SOyEtd/2

Если вы хотите получить толькоhttp://, затем используйте только:

(?<!src=")http://

DEMO: https://regex101.com/r/SOyEtd/4

Встроенный в Java:

    String input = "border=\"0\" src=\"http://www.stackoverflow.com http://";
    String output=input.replaceAll("(?<!src=\")http://","something else");
    System.out.println(output);

ВЫХОД:

border="0" src="http://www.stackoverflow.com something else
0 голосов
/ 26 декабря 2018

Требуемое регулярное выражение:

(?<!src=")http://

Часть в скобках - это «отрицательный взгляд за спиной».Это означает, что не предшествует src=".

Конечно, когда вы пишете это в литерале Java String, оно должно быть

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