我正在寻找一个正则表达式来定位众多表达式来查找和替换。表达式看起来像s360a__fieldname__c。我需要找到s360a__后跟__c的所有实例。
问题是它必须在一行内,所以它找不到起始的s360a__,然后是下一个__c,可能是下面的几行。
以下是我正在更改的一些xml的示例。
<fields>
<fullName>s360a__AddressPreferredStreetAddressCity__c</fullName>
<deprecated>false</deprecated>
<externalId>false</externalId>
<label>Preferred Street City</label>
<length>255</length>
<required>false</required>
<trackFeedHistory>false</trackFeedHistory>
<trackHistory>false</trackHistory>
<type>Text</type>
<unique>false</unique>
</fields>
<fields>
<fullName>s360a__AddressPreferredStreetAddressCountry__c</fullName>
<deprecated>false</deprecated>
<externalId>false</externalId>
<label>Preferred Street Country</label>
<picklist>
答案 0 :(得分:0)
您最好使用解析器,而不是xpath
。以下是PHP
的示例(例如Python
也可以轻松采用)。我们的想法是加载DOM
,然后使用函数过滤掉元素(在此示例中为starts-with()
和text()
):
<?php
$xml = '<fields>
<fullName>s360a__AddressPreferredStreetAddressCity__c</fullName>
<deprecated>false</deprecated>
<externalId>false</externalId>
<label>Preferred Street City</label>
<length>255</length>
<required>false</required>
<trackFeedHistory>false</trackFeedHistory>
<trackHistory>false</trackHistory>
<type>Text</type>
<unique>false</unique>
</fields>';
$dom = simplexml_load_string($xml);
// find everything where the text starts with 's360a_'
$fields = $dom->xpath("//*[starts-with(text(), 's360a_')]");
print_r($fields);
# s360a__AddressPreferredStreetAddressCity__c
代码检查文本是否以s360a_
开头。要使用某个特定字符串实际检查它是否结束,您需要fiddle quite a bit(因为尚不支持相应的函数ends-with()
)。
# check if the node text starts and ends with a specific string
$fields = $dom->xpath("//*[starts-with(., 's360a_') and substring(text(), string-length(text()) - string-length('_c') +1) = '_c']");
?>