PHP preg_match 捕获未按预期工作

PHP preg_match captures not working as expected

<?php
$html = <<<EOD
dsfgvsdfgv
sdfgv
sdfgv
<span id="userStatusText" class="text-overflow ng-binding userstatus-editable" title="_epic Can I have Coffee" ng-class="{'userstatus-editable':profileHeaderLayout.mayUpdateStatus}" ng-bind="profileHeaderLayout.statusText|statusfilter" ng-click="revealStatusForm()">"_epic Can I have Coffee"</span>
fdgvsdfgvsdfvg
var_dumpgv
dsfgv
EOD;

preg_match("!<span.+id=\"userStatusText\".+>(.*)<\/span>!", $html, $element);

if (!$element) {
  return;
}
echo $element[0];

我为这个糟糕的变量道歉,但我正在尝试从字符串中获取 _epic Can I have Coffee

我一直在尝试获取括号内的字符串,在 PHP 文档中称为捕获。

我希望能够捕获 (.*) 中的文本,但它不起作用。

当执行 preg_match 时,我仍然只会得到 span 元素 <span ...>...</span>(用 ... 替换 $html 变量中的内容)。

我查看了多个线程和文档,但找不到任何可以回答我的问题的内容。

这是我执行它时的样子

我不是要获取元素,而是要获取 Right Here 中的文本

DOMDocument and DOMXPath 是在 PHP:

中解析 HTML 更合适的方式
$html = <<<EOD
dsfgvsdfgv
sdfgv
sdfgv
<span id="userStatusText" class="text-overflow ng-binding userstatus-editable" title="_epic Can I have Coffee" ng-class="{'userstatus-editable':profileHeaderLayout.mayUpdateStatus}" ng-bind="profileHeaderLayout.statusText|statusfilter" ng-click="revealStatusForm()">"_epic Can I have Coffee"</span>
fdgvsdfgvsdfvg
var_dumpgv
dsfgv
EOD;

$doc = new DOMDocument();
$doc->loadHTML($html);
$xpath = new DOMXPath($doc);
foreach ($xpath->query('//span[@id="userStatusText"]') as $span) {
    echo $span->getAttribute('title');
}

输出:

_epic Can I have Coffee

Demo on 3v4l.org