如何仅提取与正则表达式的第一个匹配项?

How to extract only first match with regexp?

以下是字符串示例:

<option value="20150110.1932.mtsat_2.visir.bckgr.NW_Pacific_Overview.DAYNGT.jpg">20150110.1932.mtsat_2.visir.bckgr.NW_Pacific_Overview.DAYNGT.jpg</option>
<option value="20150110.1901.mtsat_2.visir.bckgr.NW_Pacific_Overview.NGT.jpg">20150110.1901.mtsat_2.visir.bckgr.NW_Pacific_Overview.NGT.jpg</option>

预期结果:

20150110.1932.mtsat_2.visir.bckgr.NW_Pacific_Overview.DAYNGT.jpg
20150110.1901.mtsat_2.visir.bckgr.NW_Pacific_Overview.NGT.jpg

我只需要从不带引号的字符串中提取文件名的第一个匹配项。我该怎么做?

模式是前6位数字以jpg结尾

我在 D 上编程。

我有很多变体。而且他们个个都是瘸子。其中之一:

(="[0-9]{8}).+(\")

您可以试试这个正则表达式:

(?<=>)([0-9]{8}.+)(?=<)

Online demo

\b\d{8}[^" ]*\.jpg(?![^"]*"(?:[^"]*"[^"]*")*[^"]*$)

尝试 this.See 演示。

https://regex101.com/r/fA6wE2/20

我知道您不想使用 html 解析器,但我想证明这对于将来发现此问题的人来说是多么简单。

regex 有点像有时对 html 有效,但有很多事情不适用:它会留下 html 个实体(例如 &amp;)未解码和提取正确的标签可能很难。 HTML 解析器使它变得简单和正确(并且 IMO 更具可读性):

我的 dom.d 在 html 上做得不错,所以我将展示如何使用它。

从我的 github 中获取 dom.d:

https://github.com/adamdruppe/arsd/blob/master/dom.d

(如果您从随机的非 UTF-8 网站解析标签汤,characterencodings.d 也是:https://github.com/adamdruppe/arsd/blob/master/characterencodings.d

那么你可以这样做:

import arsd.dom;
import std.stdio;

void main() {
    auto document = new Document("your html string here");
    foreach(option; document.querySelectorAll("option"))
         writeln(option.value); // or option.innerText
}

dmd yourfile.d dom.d 编译。 (如果您也需要处理非 utf-8,请在命令行中添加 characterencodings.d)

querySelectorAll 的工作方式类似于 CSS 选择器,类似于 Javascript 和 jQuery 中的相同功能,因此您也可以在上下文中提取选项标签来自 html 文档的其余部分。