0

以下のような生の http 応答があります。

1
1|CI17438666|IB136180000001|55544001|10.106.1.XXX|
|first        

そこから 44001 の部分を抽出する必要があります。

Start : |555 End : | を使用して、この文字列を一意に識別できます。

私が試してみました

(.*)(|555)(.*)(|) 

これは 1 を返します。

ちなみに、私はこの正規表現を Jmeter で使用しています。これは、Java スクリプト スタイルの正規表現に従います。

4

5 に答える 5

3

それがパターンである場合、これは機能します:

\|555(\d+)\|

2本のパイプの後とパイプの間のパーツと一致し555ます。

于 2013-02-26T06:59:31.453 に答える
1

これを試して :

$str  = '11|CI17438666|IB136180000001|55544001|10.106.1.XXX||first ';
preg_match('/\|555(?P<digits>\d+)\|/',$str,$match);

echo $match['digits'];

また

$str  = '11|CI17438666|IB136180000001|55544001|10.106.1.XXX||first ';
preg_match('/\|555(\d+)+\|/',$str,$match);

echo "<pre>";
print_r($match);
于 2013-02-26T07:00:57.680 に答える
1

一見したところ、正規表現には2つの問題があります。

1 つ目は、パイプ文字が正規表現で特別な意味を持ち、OR を意味することです。たとえば、この正規表現は次のとおりです。

[abc|def]

「abc」または「def」に一致します。

これは、正規表現セクション '(|555)' および '(|)' が、最初のケースでは 'nothing OR 555' を意味し、2 番目のケースでは 'nothing OR Nothing' を意味することを意味します。

パイプ文字に一致させたい場合は、エスケープする必要があるため、「|」'\|' になります。

2 番目の問題は、.* は貪欲なマッチャーであり、可能な限り一致することです。ドットは任意の文字を表すため、次の一致するグループまですぐに一致します。

したがって、パイプの問題を修正して、この新しい正規表現を取得すると:

.*\|555(.*)\|

サンプル文字列を使用すると、.* は次のように一致します。

1|CI17438666|IB136180000001|55544001|10.106.1.XXX|
                               ^^^^^^^^^^^^^^^^^^ 

つまり、次のグループが一致するまで、可能な限り一致します。

余分な ? を追加することで、貪欲から怠惰に切り替えることができます。'.*' は '.*?' になります。これは、一致が行われるとすぐに一致を停止します。正規表現は次のようになります。

.*\|555(.*?)\|

一致するグループは次のようになります。

1|CI17438666|IB136180000001|55544001|10.106.1.XXX|
                               ^^^^^ 

555 に続く文字が常に数字であることがわかっている場合は、一致するグループを数字だけに制限することができ、欲張りや怠惰について心配する必要はありません。

.*\|555([0-9]*)\|

それが役立つことを願っています。

于 2013-02-26T07:22:56.587 に答える
0

それを使用explode()するとより速くなります

参照: http: //php.net/manual/en/function.explode.php

于 2013-02-26T07:02:14.260 に答える
0
var str = "11|CI17438666|IB136180000001|55544001|10.106.1.XXX||first";
var pattern = "(.*)(/|555)([0-9]*)(/|)";
var result = str.match(pattern);
// The matches are in elements 0 through n.
for (var index = 0; index < result.length; index++)
{
    document.write ("submatch " + index + ": " +  result[index]);
    document.write("<br />");
}

3 番目のサブ文字列は、必要な結果を返します。

于 2013-02-26T08:05:13.407 に答える