另一个PHP正则表达式问题

时间:2009-08-17 04:08:28

标签: php regex

伙计们,这可能会相当简单,但是如何在一堆文本中使用此事件的正则表达式找到所有匹配项。

[[data in here]]

EG:

Blah blah blah [[find]] and maybe [[this]]

所以我能够找到事件,然后将它们替换为URL。

这有意义吗?

我尝试使用

preg_match_all("/[[([^<]*)]]/", $data, $matches, PREG_OFFSET_CAPTURE);

但是返回错误。有任何想法吗? :)

4 个答案:

答案 0 :(得分:5)

试试这个:

preg_match_all("/\[\[(.+?)\]\]/", $data, $matches, PREG_OFFSET_CAPTURE);

答案 1 :(得分:0)

也许......

"/\[.*\]/"

?只是一个疯狂的猜测。

我认为你的基本问题是你需要逃避'[]'括号,因为它们是特殊的字符。

答案 2 :(得分:0)

你需要转义'['和']'字符 - 它们是正则表达式中的特殊字符。你最好用preg_replace_callback()

做这件事
function makeURL($matches) {
    $url = $matches[1];
    return "<a href=\"http://$url\">$url</a>";
}

$data = 'My website is [[www.example.com]].';

echo preg_replace_callback('/\[\[(.*?)\]\]/', 'makeURL', $data);

// output: My website is <a href="http://www.example.com">www.example.com</a>

您可以调整makeURL()功能,以便随意重写网址。

答案 3 :(得分:0)

[]在正则表达式语法中有意义。要匹配它们,您需要使用\字符“转义”它们。所以你的正则表达式是:

"/\[\[(.+?)\]\]/"

[]字符的使用以及如何转义它们是非常基本的正则表达式知识。不要太粗鲁,但我建议花一点时间学习正则表达式,然后再为生产代码编写代码。