【问题标题】:Strip Characters from PHP String从 PHP 字符串中去除字符
【发布时间】:2015-01-09 03:43:35
【问题描述】:

我有这个字符串:

An error page was displayed to the Web Services user.\nDetails: The Status you have chosen is invalid.\n\nStack Trace: Stack trace:

字符串本身实际上又持续了大约 1000 个字符。我想要做的是提取Details:\n\Stack 之间的内容。我最终会得到The Status you have chosen is invalid.

我想我已经使用 substr 删除了前面的字符:

<?php
$error = "An error page was displayed to the Web Services user.\nDetails: The Status you have chosen is invalid.\n\nStack Trace: Stack trace:.........";
$error2 = substr($error, 63);
echo $error2;
?>

但我总是收到错误syntax error, unexpected end of file。我发现是 \n\n\ 引发了该错误,但我无法控制它们,因为它们从外部 API 调用返回到我的脚本。我在这里只定义了$error 用于说明目的。即使我只是回显$error 而不仅仅是$error2,也会出现此错误。

我已经看到我可以执行$short = substr($str, 0, strpos( $str, ' - Name:')); 之类的操作来删除尾随字符,但我需要先完成前面的工作才能执行此操作。

任何建议表示赞赏!

编辑:我在评论中提到了这一点,但错误字符串通过$error = $e-&gt;getMessage(); 从 API 传递到我的脚本。

【问题讨论】:

  • 如果回显第一个字符串会产生\n,则应将$error 测试字符串用单引号括起来,以防止\n 被解析为换行符。
  • 所以在实际的工作文件中,错误来自$error = $e-&gt;getMessage();,所以我不能把它用引号括起来,因为它不是这样写的。不过我可能是错的。
  • @HoboSapiens 不高兴。 PHP Parse error: syntax error, unexpected '^'$errora = preg_match("/^.*\sDetails:\s(.*)\sStack/m", $error); 运行(编辑:看到你的编辑,同样的错误)
  • preg_match 确实是您想要的。使用regexr.com 找出与其一起使用的确切正则表达式。另外:不要将正则表达式放在双引号中。

标签: php string


【解决方案1】:

使用带有ms 修饰符的正则表达式,以便匹配换行符:

<?php
$error = "An error page was displayed to the Web Services user.\nDetails: The Status you have chosen is invalid.\n\nStack Trace: Stack trace:.........";

$result = preg_match("/^.*Details:\s(.*?)\n*Stack/ms", $error, $matches);
$errora = $matches[1];
echo $errora;
?>

【讨论】:

  • 太完美了!测试和工作。谢谢一百万!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-21
  • 2013-01-17
  • 1970-01-01
相关资源
最近更新 更多