从序列匹配到非包含的可选字符,如果没有找到,则直到行结束

时间:2016-01-10 07:46:34

标签: regex

我正在寻找从pls,m3u和asx文件中提取网址的方法,

让我们考虑这两行字符串:

File=http://stream1:0000
<ref href="http://stream2.xyz"/>

我从/http\S*/g开始查找以“http”开头的匹配项,直到行尾,它给出了以下结果:

  • http://stream1:0000
  • http://stream2.xyz"/>

所以我正在寻找一种方法来添加一个"字符(不包括在内)的可选结尾,以便能够得到以下结果:

  • http://stream1:0000
  • http://stream2.xyz

这样做的方法是什么?

2 个答案:

答案 0 :(得分:0)

您可以使用反向引用

(["']|)(http.+)\1

Live Demo

正则表达式说明:

  1. (["']|):匹配"'或无匹配
  2. (http.+):匹配字符串http,直到行尾或后引用,并将其放入第二个捕获的组中。
  3. \1:反向引用。匹配(["']|)中的相同内容。 #1
  4. 注意:我已添加带双引号的单引号,因此这也适用于包含在单引号中的网址。如果还有其他字符可用于包围URL,则可以在字符类中添加这些字符。

    要获取该网址,请使用第二个已捕获的群组(大多数语言/工具 $2

    如果反向引用/捕获组不可行/可能,您可以使用以下正则表达式

    http[^'"\n]*
    

    Live Demo

    正则表达式说明:

    [^'"\n]*会尽可能多地匹配非'"或换行符的任何内容。

    Regex Visualization

答案 1 :(得分:0)

以下正则表达式应该有效:

(HTTP [^ \ S&#34] *)[\ S&#34;]

https://regex101.com/r/xC4qV4/1