正则表达式以匹配以前的名称

Regex to match previous names

我在编写正则表达式以匹配此页面上以前的名称时遇到了一些问题:http://steamcommunity.com/id/TripleThreat/namehistory

明确地说,我想要一个数组:

等等..

我已经尝试编写正则表达式,但这是一场灾难(我正在努力解决)

这是我写的:

$page = file_get_contents(sprintf("http://steamcommunity.com/id/TripleThreat/namehistory"));

preg_match_all("/<span class=\"historyDash\">-<\/span>((.|\n)*)<\/div>/", $page, $matches);

foreach($matches[0] as $match) {
    echo($match . "<br/>");
}

非常感谢任何帮助:)

您可以尝试以下正则表达式(匹配项在第一个捕获组中):

"/<span class=\"historyDash\">-<\/span>\s*((?:[^\<]|\n)*?)\s*<\/div>/"

Regex101 上查看。

我所做的更改:使用 \s* 修剪前后的空格,将 . 更改为 [^\<] 以仅选择非标记的那些(即,正确的文字)。


注意:正如@PedroLobito 指出的那样,don't parse HTML with regex unless necessary. Use a library to parse the DOM 而不是尽可能。我只是提供了一个简单的例子来扩展你的工作,但这可能不是最好的解决方案。