Php 正则表达式未找到目标字符串的第一个匹配项

Php 正则表达式未找到目标字符串的第一个匹配项,php,html,regex,Php,Html,Regex,在下面的html代码中,我使用正则表达式获取text1和text2。以下是我正在使用的: /[\s\n\s]*) 这里有一些文字 这里有一些文字 你们能告诉我正则表达式出了什么问题吗?是否有更好的方法来捕获title1、title2和text1、text2?在这里使用正则表达式并不是最好的方法。这是个坏习惯。您应该使用DOM/XML解析器来实现这一点 我喜欢使用PHP的类。使用,我们可以快速找到您想要的元素 $dom = new DOMDocument; $dom->loadHTML(

在下面的html代码中,我使用正则表达式获取text1和text2。以下是我正在使用的:
/[\s\n\s]*)


这里有一些文字

这里有一些文字


你们能告诉我正则表达式出了什么问题吗?是否有更好的方法来捕获title1、title2和text1、text2?

在这里使用正则表达式并不是最好的方法。这是个坏习惯。您应该使用DOM/XML解析器来实现这一点

我喜欢使用PHP的类。使用,我们可以快速找到您想要的元素

$dom = new DOMDocument;
$dom->loadHTML($html);
$xPath = new DOMXPath($dom);

$aTags = $xPath->query('//div[@class="some-class"]//a[starts-with(text(), "@")]');

foreach($aTags as $a){
    echo $a->nodeValue;
}

演示:

这是正则表达式的一个相当常见的问题,因为它们非常贪婪。[\s\s]*(不需要\n)第一个“匹配项”使用HTML解析方法不是更容易吗?为什么在这里使用正则表达式?这是HTML。您不能用正则表达式解析/匹配HTML。您应该使用DOM/XML解析器。@RocketHazmat我正在使用PHP阅读html页面以获得所需的某些字符串。因此,请使用PHP的
DOMDocument
类。这将使这更容易。请尝试
[\s\n\s]*?]*>@(.*)
,刚刚添加了
以进行匹配。这非常有用。非常感谢您提供详细的解决方案。不客气。一旦我学会了如何使用XPath,它就比带有HTML的正则表达式容易多了。
$dom = new DOMDocument;
$dom->loadHTML($html);
$xPath = new DOMXPath($dom);

$aTags = $xPath->query('//div[@class="some-class"]//a[starts-with(text(), "@")]');

foreach($aTags as $a){
    echo $a->nodeValue;
}