1

如何从给定的文本块中提取URL?

background(http://w1.sndcdn.com/f15ikDS9X_m.png)
background-image(http://w1.sndcdn.com/5ikDIlS9X_m.png)
background('http://w1.sndcdn.com/m1kDIl9X_m.png')
background-image('http://w1.sndcdn.com/fm15iIlS9X_m.png')
background("http://w1.sndcdn.com/fm15iklS9X_m.png")
background-image("http://w1.sndcdn.com/m5iIlS9X_m.png")

也许正则表达式会起作用,但我还不够先进,无法解决!

非常感谢!米奇

4

3 回答 3

4

你想多了这个问题——你需要做的就是匹配 URL,这是一个简单的匹配:

rematch('\bhttps?:[^)''"]+',input)

这将根据提供的输入起作用 - 如果使用不同的输入,可能需要调整。

\s(例如,如果这可能是一个因素,您可以选择将 a 添加到 char 类中。)


正则表达式本身很简单:

\bhttps?:  ## look for http: or https: with no alphanumeric chars beforehand.

[^)'"]+    ## match characters that are NOT ) or ' or "
           ## match as many as possible, at least one required.

如果这是匹配误报,您当然可以寻找更精致的 URL 正则表达式,例如这些.

于 2012-12-01T15:15:18.677 回答
2

演示

background(?:-image)?\((["']?)(?<url>http.*)\1\)

解释:

  • background(?:-image)?-> 它匹配背景或背景图像(不分组)
  • \(-> 匹配文字括号
  • (["']?)' or " or VOID-> 如果url 之前有 a 则匹配
  • (?<url>http.*)-> 匹配 url
  • \1\)-> 匹配分组(本说明的第三行),然后是文字括号
于 2012-12-01T14:47:48.470 回答
0

如果你想要一个没有正则表达式的答案,这样的事情会起作用。

YourString = "background(http://w1.sndcdn.com/f15ikDS9X_m.png)";
YourString = ListLast(YourString, "("); // yields http://w1.sndcdn.com/f15ikDS9X_m.png)
YourString = replace(YourString, ")", "");  // http://w1.sndcdn.com/f15ikDS9X_m.png

由于您不止一次这样做,因此您可以将其设为函数。此外,您可能需要一些其他替换命令来处理某些字符串中的引号。

说了这么多,让一个正则表达式工作会更好。

于 2012-12-01T15:27:02.073 回答