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