正则表达式现在查找所有匹配的字符串

时间:2019-01-31 06:01:27

标签: java regex

我正在使用此正则表达式("http:|"https:)\/\/.*\/content\/amc\/tdd\/.*?"查找所有以http或https开头并包含/ content / amc / tdd的URL。 但是对于文字

"<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 :(得分:2)

由于正则表达式.*中的内容是贪婪的匹配,因此它将占用您的所有字符串。

您应将其更改为.*? 像这样:

("http:|"https:)\/\/.*?\/content\/amc\/tdd\/.*?"

答案 1 :(得分:2)

尝试此正则表达式:

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

Click for Demo

说明:

  • "https?:\/\/-匹配"http://"https://
  • (?:[^\/]*\/)*?-匹配0+次出现的不是/后跟/的任何字符。将该子模式至少重复0次或多次。
  • content\/amc\/tdd-匹配content/amc/tdd
  • [^"]*"-匹配0+次出现的不是"后跟"的任何字符