0

我正在编写一个简单的代码,但无法准确找到我出错的地方。

$data = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis eget tellus cursus, ultrices justo at, ultricies libero. Vivamus consequat ante vel nunc dapibus, non tempus elit vehicula. Nulla facilisi. Proin leo urna, congue eu justo eget, viverra mattis lacus.
#otwquote";

preg_match_all('/\s#otw[0-9a-z]+\b/i', $data, $matches);
$matchtag = str_replace("#otw", "", strtolower($matches[0][0]));

echo $matchtag;

$formats = array("status", "aside", "link", "gallery", "image", "audio", "video", "quote", "chat", "standard");
$backhash ="standard";

// here $matchtag = "quote"

if ( in_array ( $matchtag , $formats ) ) {  
    echo $matchtag;
} else {
    echo $backhash;
}

现在当我使用

if ( in_array ( "quote" , $formats ) )

它工作正常。但是使用变量 $matchtag 它返回错误。请帮忙。谢谢

注意:我发现如果我把它放在$matchtag = "quote";in_array 之前它工作正常。$matchtag那么变量的格式有什么问题吗?

4

1 回答 1

1

它返回 false 是因为您的正则表达式还捕获了前面的空白字符(\s前面的那个),所以您正在使用" quote"而不是"quote"作为针。

考虑将正则表达式'/\b#otw[0-9a-z]+\b/i改为;\b是一个零长度令牌,不会干扰捕获的内容。

如果这不是可取的,替代方法包括使用积极的后视((?<=\s)而不是\s),使[0-9a-z]+部分成为自己的捕获组(这也将消除对 的需要str_replace)并在测试之前使用trimon $matchtag

于 2013-09-02T21:00:41.743 回答