我使用来自Web服务的__getLastResponse
对象上的SoapClient
函数提取了一个String。
这个字符串是XML文档的格式,除了它在开始时有一些不必要的数字,我需要删除它才能将它解析为XML。
我已经编写了一个preg_replace
函数来删除这些数字,但它不起作用;有人可以解释一下原因吗?
以下是相关代码:
$string = $search_client->__getLastResponse();
$string = preg_replace('/\A^\d+\', '', $string);
初始字符串的开头时间为234682374643<records xmlns="http://scien...</records>
等,我正在尝试<records xmlns="http://scien...</records>
。
感谢您的帮助。
**其他1 **
如果我输入$string = preg_replace("/\d+/", "", $string);
,那么它会删除字符串中的所有数字,所以我知道其他所有数据都正常工作,只是因为某种原因而没有删除其他模式的模式数字,只是第一个。)
**其他2 **
这是$search_response
stdClass对象,它是已启动的Soap Client对象的print_r
,其上调用了search($params)
函数:
stdClass Object
(
[return] => stdClass Object
(
[queryId] => 1
[recordsFound] => 3670
[recordsSearched] => 38802522
[records] =>
WOS:A1993LC481000015-&BRESINSKY, ABRESINSKY,... etc ...
)
)
正如您所见,我从__getLastResponse
中提取的字符串包含所有值为一个字符串,其数字为“1367038802522”,后跟“记录”值。正是这些数字我试图摆脱,因为我相信我将能够将剩余的String解析为XML,可能是使用SimpleXmlElement。
答案 0 :(得分:1)
^
之后您还有\A
。像这样使用它:
$string = preg_replace('/\A\d+/', '', $string);
答案 1 :(得分:1)
删除\A
$re = "/^\\d+/";
$str = "234682374643<records xmlns=\"http://scien...</records>";
$subst = '';
$result = preg_replace($re, $subst, $str);
答案 2 :(得分:1)
\A
和^
执行相同的操作(主题的开头),类似于\Z
和$
(主题的结尾)。
同时\A
和^
会打破匹配。
您的分隔符也已关闭。
尝试:
$string = "123foo";
$string = preg_replace('/^\d+/', '', $string);
var_dump($string); // "foo"
答案 3 :(得分:0)
感谢大家的帮助。
发现为什么在我运行Halcyon发布的测试时发生了这种情况,他建议输入可能不像我想的那样。事实证明,无论何时print_r
或var_dump
或__getLastResponse
,它只是显示值并错过了出现在字符串之前的一堆标记,即:
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"><soap:Body><ns2:searchResponse xmlns:ns2="http://woksearch.v3.wokmws.thomsonreuters.com"><return><queryId>1</queryId><recordsFound>3670</recordsFound><recordsSearched>38802522</recordsSearched><records>... etc...</records>
这是实际返回的内容,而不是显示的1367038802522
前缀。如您所见,这些数字是上述标签中的所有值。我通过应用htmlspecialchars($search_client->__getLastResponse());
显示以前隐藏的&#39;来获得此输出。字段。
虽然有些奇怪,但我不确定为什么这样做是因为所有内容都会在<records>
标记之后正确显示,之后所有开始标记都会显示{{{ 1}})显示为<
。因此,在<
标记之前,它会正确显示<records>
,然后显示<
代替!