删除双方括号并保留字符串


remove double square brackets and keep the string

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

所以: [[link_to_page]]

应该变成:link_to_page

我想我应该使用 php 正则表达式,有人可以帮助我吗?

提前致谢

您可以

简单地使用str_replace。

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

但这会得到一个没有"]]"闭包的"[["。以及没有"[["开口的"]]"。

目前还不完全清楚你想要什么 - 但是...

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

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

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


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

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

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

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

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


如果要对方括号的内容进行操作,请参阅fluminis的答案。

您可以使用

preg_replace

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

或使用str_replace

$repl = str_replace(array('[[', ']]'), '', '[[link_to_page]]');

如果你只想要一个匹配项:

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

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

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

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

  • /启动正则表达式
  • '['[两个[角色,但需要转义它们,因为[是一个元漫画
  • ([^']]+)获取所有不是 ] 的字符
  • ']']两个]角色,但需要转义它们,因为]是一个元漫画
  • /结束正则表达式

尝试

preg_replace(/('['[)|(']'])/, '', $string);