PHP只在特定字符之间留下文本

时间:2016-08-30 06:55:45

标签: php regex

我有很多字符串看起来像这样:

[additional-text Sample text...]

总有一个开括号+附加文本+单个空格和一个结束括号,我需要删除所有这些,以便最终的字符串看起来像这样:

Sample text...

非常感谢任何帮助或指导。

6 个答案:

答案 0 :(得分:1)

获取要保留为捕获组的子字符串:

^\[\S+\s([^]]+)\]$

现在在替换中,使用唯一捕获的组\1

Demo

答案 1 :(得分:1)

您可以使用:

$re = '/\[\S+\s|\]/'; 
$str = "[additional-text Sample text...]"; 

$result = preg_replace($re, '', $str);
//=> Sample text...

RegEx Demo

答案 2 :(得分:1)

使用substr删除前17个字符。使用正则表达式删除最后两个:

$val = '[additional-text Sample text...]';
$text = preg_replace('#\]$#', '', substr($val, 17));

答案 3 :(得分:1)

你可以使用它来获取文本块中的所有匹配项:

preg_match_all("/\[additional-text (.*?)\]/",$text,$matches);

所有文字都在$ match [1]中。那将是:

$text = "[additional-text Sample text...]dsfg fgfd[additional-text Sample text2...] foo bar adfd as ff";
preg_match_all("/\[additional-text (.*?)\]/",$str,$matches);
var_export($matches[1]);

答案 4 :(得分:1)

你也可以这样做

$a = '[additional-text Sample text...]';
$a= ltrim($a,"[additional-text ");
echo $a= rtrim($a,"]");

答案 5 :(得分:1)

正则表达式不需要使用substr

$s = "[additional-text Sample text...]";
echo substr($s, 17, strlen($s)-18);

其中17的长度为[additional-text ,而18的长度为]的+ 1。

请参阅PHP demo

正则表达式解决方案也很基础:

^\[additional-text (.*)]$

或 - 如果在结束前没有]

^\[additional-text ([^]]*)]$

并替换为$1反向引用。请参阅regex demo,此处为PHP demo

$result = preg_replace('~^\[additional-text (.*)]$~', "$1", "[additional-text Sample text...]");
echo $result;

模式详细信息

  • ^ - 字符串开头
  • \[ - 文字[
  • additional-text - 文字文字
  • (.*) - 除了换行符之外的零个或多个字符,最多不超过
  • ]$ - 字符串末尾的]