3

監視システムから文字列を受信して​​います。文字列には、変数が事前/事後修正されていることに関心のある3つの変数が含まれてc=VAR1; e=VAR2; s=VAR3;いるため、たとえばc= ;の間にテキストを取得します。しかし、成功は限られています。これらは、私がテストしたREGEXのいくつかです。

c=([^;]+);
.+c=(.+);.+
(?<=c=\()(.*?)(?=\;*\))
c=(.*);

完全なアラート文字列は次のようになります。

alert c=Vari Able1; e=Vari Able2; s=Vari Able3;

しかし、私が期待する方法で戻ってくるものはないようです。

どんな助けでも大歓迎です。

ありがとう!

4

4 に答える 4

1

次のようなものを使用できます。

(\w+)=([^;]+)

これはすべての値(キーと値)を取得しますが、c値のみを取得する場合は次のようになります。

c=([^;]+)

との間のすべてをキャプチャする必要が=あります;([^;]+)セミコロンではないすべての文字をキャプチャし、1回以上繰り返します)。

于 2012-09-25T21:46:26.047 に答える
0

最初の正規表現は適切ですが、変数に対してのみ機能しcます。これは、3つの変数すべてに対して機能するバリエーションです。

[ces]=([^;]+);

これにより、c、e、およびs変数が検索されます。

PHPでは、次のように実行できます。

$string = 'c=VAR1; e=VAR2; s=VAR3;';
preg_match_all("/([ces])=([^;]+);/", $string, $out, PREG_PATTERN_ORDER);
$tot = count($out[1]);
for ($i=0;$i<$tot;$i++) {
    echo $out[1][$i]; //will echo 'c' , 'e' , 's' respectively
    echo $out[2][$i]; //will echo 'VAR1' , 'VAR2' , 'VAR3' respectively
}

更新:コメントでOPの質問に答える

上記のループは、見つかった値を動的に割り当てるためのものであるため、正規表現で4、5、または10個の変数が見つかった場合、forはそれらすべてをループします。ただし、文字列に3つの変数しかないことが確実な場合は、次のように一度に直接割り当てることができます。

$string = 'c=VAR1; e=VAR2; s=VAR3;';
preg_match_all("/([ces])=([^;]+);/", $string, $out, PREG_PATTERN_ORDER);
$$out[1][0] = $out[2][0]; // var $c is created with VAR1 value
$$out[1][1] = $out[2][1]; // var $e is created with VAR1 value
$$out[1][2] = $out[2][2]; // var $s is created with VAR1 value

echo $c; //will output VAR1
echo $e; //will output VAR2
echo $s; //will output VAR3

上記のコードではPHP変数変数を使用しています。

于 2012-09-25T21:53:00.650 に答える
0

このようなことを試してください、

(?<=((alert)?.*=)).*?(?=;)

ゼロ幅アサーションの先読みと後読みを参照してください。

RegexBuddyScreenShot

ここに画像の説明を入力してください

于 2012-09-26T03:52:24.460 に答える
0

したがって、この質問に対する最終的な解決策は、使用していたツール、特にREGEXエンジンについてもう少し調べる必要があることでした... PCREを使用していることが判明したため、最終的なREGEXは次のようになりました。

'(?<=c=)[^;]*'
'(?<=e=)[^;]*'
'(?<=s=)[^;]*'

ソフトウェア内に存在するツールで、これを再構成すると、モニターシステムのアラートを正しく解釈するために必要な3つの変数が得られました。

皆さんありがとう!

于 2012-09-26T18:50:41.223 に答える