我正在写一个简单的代码,但找不到我出错的地方。
$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,它返回false。 请帮忙。 感谢
N.B:我发现如果我把$matchtag = "quote";
放在in_array之前就行了。那么$matchtag
变量的格式是否存在任何问题?
答案 0 :(得分:1)
它返回false,因为你的正则表达式还会捕获前面的空格字符(前面是\s
),所以你使用" quote"
而不是"quote"
作为指针。
请考虑将正则表达式更改为'/\b#otw[0-9a-z]+\b/i
; \b
是一个零长度令牌,不会干扰捕获的内容。
如果这不合适,替代方案包括使用正面的lookbehind((?<=\s)
而不是\s
),使[0-9a-z]+
部分成为自己的捕获组(这也可以避免需要{ {1}})并在测试前在str_replace
上使用trim
。