Php 正则表达式匹配span还是a?

Php 正则表达式匹配span还是a?,php,regex,Php,Regex,我有这个功能: function getTextBetweenTags($string, $tagname) { $pattern = "/<$tagname ?.*>(.*)<\/$tagname>/"; preg_match($pattern, $string, $matches); if(count($matches) > 0){ return $matches[1]; } } 函数getTextBetween

我有这个功能:

function getTextBetweenTags($string, $tagname) {
    $pattern = "/<$tagname ?.*>(.*)<\/$tagname>/";
    preg_match($pattern, $string, $matches);
    if(count($matches) > 0){
        return $matches[1];
    }
}
函数getTextBetweenTags($string,$tagname){ $pattern=“/(.*)/”; 预匹配($pattern,$string,$matches); 如果(计数($matches)>0){ 返回$matches[1]; } }
例如,将
span
作为参数
$tagname
传递允许我匹配任何span标记。我希望通过
a | span
将允许我处理任何
a
span
标记。但它与任何东西都不匹配。为什么?

尝试在括号中分组(正如我们在评论中所说的):

函数getTextBetweenTags($string,$tagname){ $pattern=“/(.*)/”; 预匹配($pattern,$string,$matches); 如果(计数($matches)>0){ 返回$matches[1]; } }
如果您通过
$string=“a | span”
,您将获得
$pattern=“/”

建议:在预匹配之前使用可能的预匹配引用您的模式什么是失败的源示例?而不是
if(count($matches)>0{
只要
if
preg_match
。这不会将Henrik-Henrikson与模式模式a | span匹配?它与您编写的模式相同(
?.
)。代码唯一的区别是括号
[]
对允许的字符串集合进行分组,这些字符串由
|
[]
是一个字符类,它允许单个字符,而不是组。这将允许
s
p
a
n
a
。@Himmators更新您的问题以获得示例字符串。@Himmators您在问题上使用了正确的东西。
[]
建议不仅匹配a、span,还匹配a、span、snap、pans等
function getTextBetweenTags($string, $tagname) {
    $pattern = "/<($tagname)?.*>(.*)<\/($tagname)>/";
    preg_match($pattern, $string, $matches);
    if(count($matches) > 0){
        return $matches[1];
    }
}