Как извлечь ссылки из уценки - PullRequest
1 голос
/ 29 февраля 2020

Я пытаюсь проанализировать ввод, который может быть гиперссылкой или гиперссылкой в ​​уценке. Я могу легко проверить, является ли это гиперссылкой с ^https?://.+$ и использовать regexp.Match, но с уценочными ссылками это совершенно другая кроличья нора для меня.

Я натолкнулся на это регулярное выражение ^\[([\w\s\d]+)\]\((https?:\/\/[\w\d./?=#]+)\)$, которое я пытался изменить, чтобы оно соответствовало только ссылке уценки, но после того, как по каким-то причинам были захвачены последние парантезы, я только что посмотрел на сопоставляя 2-ю группу захвата, ссылку, с такими вещами, как SubexpNames, FindStringIndex, FindSubmatch, Split и т. д., но ни один из них, похоже, не захватывает то, что я ищу (иногда они возвращают всю строку в любом случае) или, скорее всего, я Я делаю это неправильно.

Вот что я ищу:

Input - [https://imgur.com/abc](https://imgur.com/bcd)
Should output the link - https://imgur.com/bcd

Вот мой код: https://play.golang.org/p/OiJE3TvvVb6

1 Ответ

1 голос
/ 01 марта 2020

Вы можете использовать regexp.FindStringSubmatch, чтобы получить захваченное значение, полученное с помощью регулярного выражения, проверяющего один URL:

package main

import (
    "fmt"
    "regexp"
)

func main() {
    markdownRegex := regexp.MustCompile(`^\[[^][]+]\((https?://[^()]+)\)$`)
    results := markdownRegex.FindStringSubmatch("[https://imgur.com/abc](https://imgur.com/bcd)")
    fmt.Printf("%q", results[1])
}

См. Демонстрационную версию GO онлайн .

Вы можете использовать regexp.FindAllStringSubmatch, чтобы найти все вхождения нужных вам ссылок:

package main

import (
    "fmt"
    "regexp"
)

func main() {
    markdownRegex := regexp.MustCompile(`\[[^][]+]\((https?://[^()]+)\)`)
    results := markdownRegex.FindAllStringSubmatch("[https://imgur.com/abc](https://imgur.com/bcd) and [https://imgur.com/xyy](https://imgur.com/xyz)", -1)
    for v := range results {fmt.Printf("%q\n", results[v][1])}
}

См. Go lang demo

Шаблон означает :

  • \[ - [ char
  • [^][]+ - 1+ символов, отличных от [ и ]
  • ]\( - ]( подстрока
  • (https?://[^()]+) - Группа 1: http, затем необязательная s, затем подстрока ://, а затем 1+ символов, отличных от ( и )
  • \) - ) char.

См. online regex demo .

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