Php 正则表达式提取什么';s之后<;br>;停在-

Php 正则表达式提取什么';s之后<;br>;停在-,php,regex,Php,Regex,代码: Name5132-0918 我使用正则表达式来提取文本,但我无法找到一个只提取5132的模式 我试过了 pattern3='/(*?)/s'; 从html解析数据并不是正则表达式的最佳选择。 你应该使用html解析器 但是,如果您仍然想使用正则表达式,可以使用类似于以下内容的内容:/(.*?)-/ 它搜索文本,并捕获第一个“-”符号之前的任何内容,以$matches[1] 如果你只想捕捉数字,有更好的方法 <span class="_c1subtitle_c1">N

代码:

Name
5132-0918
我使用正则表达式来提取文本,但我无法找到一个只提取5132的模式

我试过了

pattern3='/(*?)/s';

从html解析数据并不是正则表达式的最佳选择。 你应该使用html解析器

但是,如果您仍然想使用正则表达式,可以使用类似于以下内容的内容:
/
(.*?)-/

它搜索文本

,并捕获第一个“-”符号之前的任何内容,以
$matches[1]

如果你只想捕捉数字,有更好的方法

    <span class="_c1subtitle_c1">Name<br> 5132 - 0918</span>
$text='Name
5132-0918'; $result=preg_match('/
(.*?-/'),$text,$matches); var_dump($结果)//1-如果找到匹配项,则为0,否则为 var_dump($matches)//数组,0-完全匹配字符串,1-组内匹配 var_dump(trim($matches[1])//这就是你想要的
有关更多信息,我建议阅读:

如果只想匹配数字,可以尝试以下模式:

$text = ' <span class="_c1subtitle _c1">Name<br> 5132 - 0918</span>';
$result = preg_match('/<br>(.*?)-/', $text, $matches);

var_dump($result);//1 - if match was found, 0 otherwise
var_dump($matches);//array, 0 - full matched string, 1 - match inside group
var_dump(trim($matches[1]));//5132 this is what you want in your case
这将显示空白也被捕获。

它工作正常

preg_match("/<br>(.+?)-/", $s, $matches);
$text = $matches ? $matches[1] : NULL;
var_dump($text);
$text='Name
5132-0918'; $match=preg\u match(“/\s\d+\s(?=\-)/”,$text); 回声$匹配;
\s匹配任何空白字符

\d+匹配一个数字(等于[0-9]) +量词-在一次和无限次之间匹配,尽可能多地匹配,根据需要返回

\-匹配字符-按字面意思


您可以使用和来获取范围中的第二个节点,而不是使用正则表达式

文本节点将为您提供
5132-0918

要获得
5132
,可以使用explode和
-
作为分隔符

$text = '<span class="_c1subtitle_c1">Name<br> 5132 - 0918</span>';
$match= preg_match("/\s\d+\s(?=\-)/",$text);
echo $match;
//来自curl请求的Html。
$html=第(1)项;
如果($secondTextNode){
$result=explode(“-”,$secondTextNode->nodeValue)[0];
回声$结果;
}
这将给你:

5132

简单地
preg_match('/
*?(\d+/),'Name
5132-0918',$number)

这会让你朝着正确的方向开始

// Html from your curl request.
$html = <<<HTML
    <span class="_c1subtitle_c1">Name<br> 5132 - 0918</span>
HTML;

$doc = new DOMDocument();
$doc->loadHTML($html);
$xpath = new DOMXPath($doc);

$secondTextNode = $xpath->query('//span[@class="_c1subtitle_c1"]/text()')->item(1);
if ($secondTextNode) {
    $result = explode("-", $secondTextNode->nodeValue)[0];
    echo $result;
}
$ch=curl\u init('http://www.example.com/some.html');
curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);
$html=curl\u exec($ch);
preg_match_all('/
*?(\d+/”,$html,$numbers); 打印($number);#你会看到你的比赛
我忘了提到这是一个卷曲相关的代码,我正在从一个网站中提取数据,所以我基本上没有原始代码。我只知道在把太多的资源投入到基于正则表达式的HTML分析器之前,你应该考虑阅读。简单地说,代码> PrggMatter(‘/\Br*.*(\D+)’,‘名称’BR> 5132—0918’,$个数)。
我喜欢这个图案,但我如何将它与curl一起使用?@Timo什么不起作用?您通过curl将接收到的html传递到
loadHTML
,然后就没有结果了?那么您得到了一个错误?$cpage=curl(')$模式4='/(*?)/s'$数据=预匹配所有($pattern4,$ccpage,$matches);在原始网站中,数字和文本之间用如下方式分隔:'Name
5132-0918';我想得到每一个跨度的第一个数字user@Timo使用
DOMDocument
可以避免使用正则表达式和
preg\u match\u all
// Html from your curl request.
$html = <<<HTML
    <span class="_c1subtitle_c1">Name<br> 5132 - 0918</span>
HTML;

$doc = new DOMDocument();
$doc->loadHTML($html);
$xpath = new DOMXPath($doc);

$secondTextNode = $xpath->query('//span[@class="_c1subtitle_c1"]/text()')->item(1);
if ($secondTextNode) {
    $result = explode("-", $secondTextNode->nodeValue)[0];
    echo $result;
}
$ch = curl_init('http://www.example.com/some.html');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$html = curl_exec($ch);
preg_match_all('/<br>.*?(\d+)/', $html, $numbers);
print_r($numbers); # You will see your matches