如何匹配[...]的正则表达式模式

时间:2014-08-13 08:13:26

标签: php html regex

我正在使用wordpress,我需要过滤掉这种模式中的所有字符串

[gallery columns............] 

例如,如果是这样的字符串

[gallery columns="3" ids="426,425,427"] abc asdasdsad

它应该返回,注意到]和下一个字符串的第一个字符之间的空格也应该被删除(如果有的话)

abc asdasdsad

感谢您的帮助,尝试了一些像([\[\s\S\] ])这样的正则表达式,但是没有用。

4 个答案:

答案 0 :(得分:3)

使用模式:

/\[.*?\]\s*/

确切的陈述将使用preg_replace

preg_replace( "/\[.*?\]\s*/", "", $str );

答案 1 :(得分:2)

另一种解决方案。 不是正则表达式,而是更有趣。 使用stringpos的组合,substr和trim:)

<?
$string = '[gallery columns="3" ids="426,425,427"] abc asdasdsad';
$pos = strrpos($string, "]");

if ($pos === false) {
  echo "Could not find ']' in string '$string'";
}
else {
  // Grab what you want from the next char position onwards
  $wanted = substr($string, $pos+1);

  // Get rid of starting and end spaces
  trim($wanted);

  // Print out result
  echo "RESULT: $wanted";
}
?>

答案 2 :(得分:1)

如果您只对[...]感兴趣,请尝试

\[[\s\S]+\]

这是online demo


从索引1和2获取匹配的组以匹配

(\[[\s\S]+\])\s*(.*)

这是online demo


您也可以使用[^\]]+代替[\s\S]+

示例代码:

$re = "/(\\[[^\\]]+\\])\\s*(.*)/";
$str = "[gallery columns=\"3\" ids=\"426,425,427\"] abc asdasdsad";

preg_match_all($re, $str, $matches);

答案 3 :(得分:1)

使用WordPress中提供的strip_shortcodes,可以处理任何和所有类型的WordPress短代码的任何和所有边缘情况。