2016-08-30 6 views
-1

以下のxmlファイルを参照してください。 $ BASE_DIR、$ ENV_PREFIXなどは、Linux OSの環境変数です。私は書式$の変数の後ろに任意の文字、次に任意の文字または数字が<シンボルまで見つかるようにして、タグが閉じられているものをリストに格納したいと思います。 $ {envPrefix}がサードパーティのAPIによって後で置き換えられ、このリストで無視されるべきであることに注意してください。正規表現を使用して要件を処理する

<?xml version="1.0" encoding="UTF-8"?> 
<myConfig xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:noNamespaceSchemaLocation="http://myconfig.xsd"> 

    <configVariable name="baseDir" type="java.lang.String"> 
     <value>$BASE_DIR</value> 
    </configVariable> 

    <configVariable name="envPrefix" type="java.lang.String"> 
     <value>$ENV_PREFIX</value> 
    </configVariable> 

    <configVariable name="logPath" type="java.lang.String"> 
     <value>${baseDir}/${envPrefix}</value> 
    </configVariable> 

    <configVariable name="appName"> 
     <value>Publish</value> 
    </configVariable> 

    <configVariable name="CUSTOM_LOG"> 
     <value>$CUSTOM_LOG</value> 
    </configVariable> 

    <configVariable name="PUBLISH_LOG"> 
     <value>$PUBLISH_LOG</value> 
    </configVariable> 

    <logging> 
     <destination type="file" maxFileBackup="16" maxFileSize="10MB" 
      filePath="${PUBLISH_LOG}/${appName}.log" smLogName="publish" /> 
     <priority level="info" smLogName="publish" /> 
    </logging> 

    ....... 

</myConfig> 



String fileContent="the_file_provided_above"; 

      List<String> allMatches = new ArrayList<String>(); 

      Matcher m = Pattern.compile(Pattern.quote("????What goes here">)).matcher(fileContent); 
      while (m.find()) { 
       allMatches.add(m.group()); 
      } 
+0

私はここに行く必要のある正規表現を理解しようとしていますが、これを処理するために$の後ろにあるものについてはわかりません。私は以下のようなものを試してみました。Matcher m = Pattern.compile(Pattern.quote( "$ ENV_PREFIX"))。matcher(fileContent); \t \t一方(m.find()){ \t \t \t allMatches.add(m.group())。 \t \t} –

答えて

0

あなたの正規表現としてこのようなものを使用してみてください:

<value>(\$\w+)<\/value>

これは文字通り$にマッチします、少なくとも一つの単語文字(AZ、AZ、0-9が続き、 _)。 $の後に単語の文字を一致させると、要素の一致を回避できます。\w{と一致しません。

+0

パーフェクト!それは私の要求に合っています。ありがとう。 \t \t Matcher m = Pattern.compile( "(\\ $ [a-zA-Z] \\ w *)<\\/value>").matcher(fileContent); –

+0

マッチャーm = Pattern.compile( "(\\ $ [a-zA-Z] \\ w *)<\\/value>").matcher(fileContent); \t \t(m.find()){ \t \t \t文字列グループ= m.group(); \t \t \t allMatches.add(group.substring(7、group.length() - 8)); \t \t} –

関連する問題