Regex теперь находит все подходящие строки - PullRequest
0 голосов
/ 31 января 2019

Я использую это регулярное выражение ("http:|"https:)\/\/.*\/content\/amc\/tdd\/.*?", чтобы найти все URL, которые начинаются с http или https и содержат / content / amc / tdd Но для текста

"<a id='cdq_element_175_link' href='http://google.com' data-href='edit' >
<img src=\"http://localhost:8080/content/amc/tdd/abc/download_1.jpeg? 
ch_ck=1548843340209\" alt=\"\" id=\"element_175\" style=\"height: 135.575px; width: 135.575px;\" data-href=\"edit\">
<img src=\"http://localhost:8080/content/amc/tdd/abc/download_1.jpeg?ch_ck=1548843340209\" alt=\"\" id=\"element_175\" style=\"height: 135.575px; width: 135.575px;\" data-href=\"edit\">
</a>"

Я не получаю две строки, которыесоответствует шаблону, вместо этого я получаю полную строку, начиная с первого экземпляра до последнего.

Что я делаю не так?

Ответы [ 2 ]

0 голосов
/ 31 января 2019

Попробуйте это регулярное выражение:

"https?:\/\/(?:[^\/]*\/)*?content\/amc\/tdd[^"]*"

Нажмите для демонстрации

Объяснение:

  • "https?:\/\/ - соответствует "http:// или "https://
  • (?:[^\/]*\/)*? - соответствует 0+ вхождений любого символа, который не является /, за которым следует /.Этот подшаблон повторяется 0 или более раз, как можно меньше.
  • content\/amc\/tdd - соответствует content/amc/tdd
  • [^"]*" - соответствует 0+ вхождений любого символа, который не является " с последующим "
0 голосов
/ 31 января 2019

Поскольку внутри вашего регулярного выражения .* находится жадное совпадение, оно съест всю вашу строку.

Вы должны изменить его на .*? Как это:

("http:|"https:)\/\/.*?\/content\/amc\/tdd\/.*?"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...