0

我想要完成的是一个相当简单的正则表达式模式,它最终会抓取页面/自定义帖子类型的内容。暂时我只是检查一个单行字符串。

以下 RegEx 模式有效(复制并粘贴到 RegExr - http://regexr.com)。

$pattern = "/\[jwplayer(.+?)?\]?]/g"; 
$videoTest = "[jwplayer config=\"top_10_videos\" mediaid=\"107\"]";
preg_match($videoTest, $pattern, $matches);
print_r($matches);`

但是输出如下:

Array
(
    [0] => Array
        (
        )
)

我已经测试了其他正则表达式模式(简单的模式),并且我已经搜索了网络(包括堆栈溢出)来寻找这个特定问题的答案,但没有成功解决这个问题。上面的 php 代码已放置在 WordPress v 3.5 的 functions.php 中,如果该信息有帮助并使用“wp_ajax”钩子调用。ajax 挂钩按预期工作。

任何人都可以提供的任何帮助都会很棒!

谢谢,尼克

4

1 回答 1

3

PHP 中不使用g修饰符。改为使用。preg_match_all()

此外,参数preg_match的顺序错误。参数需要按以下顺序:

preg_match($pattern, $videoTest, $matches);

阅读正则表达式文档

一种使用正则表达式从字符串中检索内容的更强大的方法,它尽可能具体。这可以防止畸形的东西通过。例如:

function getJQPlayer($string) {
    $pattern = '/\[jwplayer(?:\s+[\w\d]+=(["\'])[\w\d]+\\1)*\]/';
    preg_match_all($pattern, $string, $matches, PREG_SET_ORDER);
    foreach ($matches as & $match) {
        $match = array_shift($match);
    }
    return $matches ?: FALSE;
}
$videoTest  = "[jwplayer config=\"top_10_videos\" mediaid=\"107\"]";
$videoTest .= ",[jwplayer config=\"bottom_10_videos\" mediaid=\"108\"]";
echo '<pre>', print_r(getJQPlayer($videoTest), true);
于 2013-01-25T00:23:55.887 回答