0

开发一个速记解析器作为客户端应用程序的一部分。我想设置一个速记来创建类似于 mediawiki 的链接。

IE:[[link_location|link_title]]最终变成<a href="link_location">link_title</a>

我需要做的是从括号之间提取字符串,以便我可以处理它;在进入链接之前,需要进行大量验证和关键字转换。我很陌生preg_match- 我可以将括号中的表达式与 匹配/\[\[(.*?)\]\]/,但我不知道如何从中间提取字符串。谁能告诉我我错过了什么?或者,如果我把这一切都搞错了,请怜悯并指出我正确的方向?

谢谢!

编辑:我应该澄清一下:我需要提取字符串并对其进行处理,因此preg_replace在这种情况下将其直接放入链接中是行不通的。

4

2 回答 2

3
$string = preg_replace("/\[\[([^\|]+)|([^\]]+)\]\]/", "<a href=\"\\1\">\\2</a>", $string);

更多的

http://php.net/manual/en/function.preg-replace.php

ps 未测试。


至于编辑:

preg_match("/\[\[([^\|]+)\|([^\]]+)\]\]/", $input, $m);

$m[1] -- now is the location
$m[2] -- now is the title

如果你有很多:

preg_match_all("/\[\[([^\|]+)\|([^\]]+)\]\]/", $input, $m);

$m[1] -- now contains all location occurrences
$m[2] -- now contains all title occurrences 

[编辑] 修复错误。

于 2013-09-23T18:51:40.187 回答
2

$1获取第一个匹配组,$2获取第二个等。

这是您的案例的工作代码:

preg_replace("/\[\[(.*?)\|(.*?)\]\]/", "<a href=\"$1\">$2</a>", "[[link_location|link_title]]");
于 2013-09-23T18:52:55.743 回答