3

我需要从字符串中删除所有方括号并保留字符串。我一直在环顾四周,但所有主题 OP 都想用某些东西替换字符串。

所以:[[link_to_page]]

应该变成:link_to_page

我想我应该使用 php regex,有人可以帮助我吗?

提前致谢

4

5 回答 5

9

您可以简单地使用 str_replace。

$string = str_replace(array('[[',']]'),'',$string);

但这会得到一个 '[[' without a ']]' 闭包。还有一个没有 '[[' 开头的 ']]'。

于 2013-10-04T13:14:42.180 回答
5

尚不完全清楚您想要什么-但是...

如果您只是想“删除所有方括号”而不担心配对/等,那么一个简单的 str_replace 就可以了:

str_replace( array('[',']') , ''  , $string )

那不是(也不需要是)正则表达式。


如果你想解开包含未知内容的成对双括号,那么你想要一个正则表达式替换,它使用preg_replace代替。

由于[]是正则表达式中的元字符,它们需要用反斜杠转义。

要匹配双括号文本的所有实例,您可以使用模式\[\[\w+\[\]并替换这些括号,您可以将内容放入捕获组(用括号括起来)并替换所有实例,如下所示:

$output = preg_replace( '/\[\[(\w+)\[\]/' , '$1' , $string );

匹配任何字母数字或下划线 - 如果您想允许更多/更少的\w字符,它可以更新,例如\[\[([a-z\-_]+)\[\]或任何有意义的。


如果您想对方括号的内容采取行动,请参阅fluminis 的答案

于 2013-10-04T13:28:19.337 回答
1

您可以使用preg_replace

$repl = preg_replace('/(\[|\]){2}/', '', '[[link_to_page]]');

或使用str_replace

$repl = str_replace(array('[[', ']]'), '', '[[link_to_page]]');
于 2013-10-04T13:12:22.623 回答
1

如果你只想要一场比赛:

preg_match('/\[\[([^\]]+)\]\]/', $yourText, $matches);
echo $matches[1]; // will echo link_to_page

或者,如果您想从文本中提取所有链接

preg_match_all('/\[\[([^\]]+)\]\]/', $yourText, $matches);
foreach($matches as $link) {
   echo $link[1];
}

如何阅读'/\[\[([^\]]+)\]\]/'

  • /启动正则表达式
  • \[\[两个[字符,但需要转义它们,因为 [ 是元字符
  • ([^\]]+)获取所有不是 ] 的字符
  • \]\]两个]字符,但需要转义它们,因为 ] 是元字符
  • /结束正则表达式
于 2013-10-04T13:32:47.273 回答
0

尝试

preg_replace(/(\[\[)|(\]\])/, '', $string);
于 2013-10-04T13:12:38.200 回答