2016-04-07 13 views
1

私は検索して置換するための多数の式を見つけるための正規表現を探しています。式はs360a__fieldname__cのように見えます。 s360a__の後に__cが続くすべてのインスタンスを見つける必要があります。私は正規表現を開始する必要がありますと終了する

問題は1行の中になければならないため、開始する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> 
+3

どのような環境で正規表現を使用していますか? –

答えて

0

代わりにxpathと組み合わせたパーサーを使用する方がよいでしょう。 PHPの例があります(例:Pythonでも簡単に採用できます)。

<?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_で始まる場合:アイデアは、要素(この例では、starts-with()text())をフィルタリングする機能を使用し、その後、DOMをロードすることです。 の末尾にという文字列があるかどうかを実際に確認するには、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']"); 
?> 
関連する問題