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
<?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 = <<<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