2017-01-27 5 views
0

私はDelphiのプロジェクトを持っており、そのプロジェクトではPHPファイルからバージョン情報を取得する必要があります。 PHPファイルであり、以下のような行である:Delphiを使用してphpファイルからバージョン情報を取得するための正規表現

$app_version = 'X.X'; 

は私が

RegularExpression.Create('app_version.*''(?<appVersion>.*)''',[roIgnoreCase,roMultiline]); 

を使用してX.Xを取得しようとしていながら、私は

APP_VERSION = 'XX' を取得しています

ドルなし$とセミコロン;記号 - それは大丈夫です。しかし、私は実際にのみ

X.X

一部を必要とする必要があります。だから正規表現ルールを使ってバージョン番号部分だけを取得することはできますか?

\$app_version\s*=\s*["']([^"']*)["']; 

これはライン上の式全体に一致します。

+1

正規表現に関する本またはチュートリアルをお読みください。どうしてそんなに簡単にあきらめたのですか? –

+0

@DavidHeffernan私は何度も試してみましたが、成功しませんでしたが、ページにはDelphiの正規表現メカニズム(PCRE)に関する他の質問があります。私はより多くの情報を読んで取得し始めました。アドバイスありがとう.. – Alper

答えて

2

ちょうど次の正規表現を使用します。最初のグループ$1にはバージョン番号が入ります。

  • \$→は、それ以外の場合は、 "文字列の末尾に"
  • \s*→0以上の空白文字
  • ["']→どちらか"または'
  • [^"']*→0文字以上となり、ドル記号をエスケープこれは等しくない"'
  • (何か)→マッチ

    var regex = /\$app_version\s*=\s*["']([^"']*)["']/g; 
     
    var text = document.getElementById('main').innerHTML; 
     
    var match = regex.exec(text); 
     
    
     
    while(match !== null) { 
     
        console.log(match[1]); 
     
        match = regex.exec(text); 
     
    }
    #main { 
     
        white-space: pre; 
     
        font-family: monospace; 
     
    }
    <div id="main"> 
     
        $app_version = '10.2'; 
     
        $app_version = "11.3"; 
     
        $ap_version = "10.30; 
     
        $app_version = 9.30; 
     
    </div>


    :問合せから抽出するグループは、ここで

のJavaScript例である($1$2、等とも呼ばれます) Delphi(source):

regexpr := TRegEx.Create('\$app_version\s*=\s*["\']([^"\']*)["\'];',[roIgnoreCase,roMultiline]); 
match := regexpr.Match(searchMe); 
if not match.Success then 
begin 
    WriteLn('No Match Found'); 
    exit; 
end; 

while match.Success do 
begin 
    WriteLn('Match : [' + match.Value + ']'; 
    //group 0 is the entire match, so count will always be at least 1 for a match 
    if match.Groups.Count > 1 then 
    begin 
    for i := 1 to match.Groups.Count -1 do 
     WriteLn('  Group[' + IntToStr(i) + '] : [' + match.Value + ']'; 
    end; 
    match := match.NextMatch; 
end; 

デルファイのコードはテストされていません。

+0

あなたの努力に感謝しますが、私はこのコードはDelphiで使用するためのものではないと思います。私が間違っている? – Alper

+0

@Alper Regexはほとんどの言語で使うことができ、どこでも同じように見えます。私はDelphiで例を追加しました。 –

+0

Delphiコードをもう一度ありがとうが、あなたのコードはapp_version = 'X.X'という結果も返します。しかし、私はapp_version = 'X.X'またはapp_version = 'X.X.X'を含む行からX.XまたはX.X.Xの逆の部分だけを取得する必要があります... – Alper

関連する問題