我需要从字符串中删除所有方括号并保留字符串。我一直在环顾四周,但所有主题OP都希望用一些东西替换字符串。
所以:[[link_to_page]]
应该成为:link_to_page
我想我应该使用php正则表达式,有人可以帮助我吗?
提前致谢
答案 0 :(得分:5)
您只需使用str_replace。
$string = str_replace(array('[[',']]'),'',$string);
但这会得到一个'[['没有']]'闭包。并且'']''没有'[['开场。
答案 1 :(得分:3)
目前还不完全清楚你想要什么 - 但是......
如果你只是想“删除所有方括号”而不用担心配对/ etc,那么一个简单的str_replace就会这样做:
str_replace( array('[',']') , '' , $string )
这不是(也不一定是)正则表达式。
如果你想打开包含未知内容的配对双括号,那么你需要一个正则表达式替换,而不是preg_replace。
由于[
和]
是正则表达式中的元字符,因此需要使用反斜杠进行转义。
要匹配双括号文本的所有实例,您可以使用模式\[\[\w+\[\]
并替换那些可以将内容放入捕获组的括号(通过用括号括起来)并替换所有实例,如下所示:
$output = preg_replace( '/\[\[(\w+)\[\]/' , '$1' , $string );
\w
匹配任何字母数字或下划线 - 如果您想允许更多/更少的字符,则可以更新,例如\[\[([a-z\-_]+)\[\]
或任何有意义的事情。
如果您想对方括号的内容采取行动,请参阅answer by fluminis。
答案 2 :(得分:1)
您可以使用preg_replace
:
$repl = preg_replace('/(\[|\]){2}/', '', '[[link_to_page]]');
或使用str_replace
:
$repl = str_replace(array('[[', ']]'), '', '[[link_to_page]]');
答案 3 :(得分: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];
}
如何阅读'/\[\[([^\]]+)\]\]/'
/
启动正则表达式\[\[
两个[
字符但需要转义它们,因为[是一个元字符([^\]]+)
获取所有不是的字符\]\]
两个]
个字符,但需要转义它们,因为]是元字符/
结束正则表达式答案 4 :(得分:0)
尝试
preg_replace(/(\[\[)|(\]\])/, '', $string);