-1

これは私の文字列です:

a:1:{i:0;a:4:{s:1:"i";s:5:"19807";s:1:"c";s:19:"7025462932180014917";s:1:"a";
d:88.719999999999998863131622783839702606201171875;s:2:"ba";
d:88.719999999999998863131622783839702606201171875;}}

702546の後に二重引用符で始まり、その前で終わる部分を引き出したいと思ってい7ます。番号の長さはさまざまですが702546、常に引用符で始まり、引用符で終わります。

したがって、私の最終的な選択はになります7025462932180014917

4

3 に答える 3

0

この正規表現を使用します(?<=")(702546\d+)(?=")

正規表現エンジンが後読みをサポートしていない場合、この正規表現"(702546\d+)"の一致はグループ 1 になります。

于 2012-09-05T20:23:57.867 に答える
0

基本的な正規表現は702546[^"]*、そのような任意の文字列に一致することですが、おそらく何らかのプログラミング言語を使用して、実際にそれらを引き出す必要があります。

vnix$ grep -o '702546[^"]*' file

または、スクリプト言語では、次のようなものです。

perl -nle 'print $1 while m/(702546[^"]*)/g' file

ただし、あなたの問題の説明から、これは実際にあなたがすべきことではないと私は信じています。 あなたが本当に解決しようとしている問題は何ですか?

于 2012-09-05T20:27:40.813 に答える
0

これは、使用しているテクノロジー/言語によって少し異なる場合がありますが、基本的には次のようなものを使用できます

(?<=")702546\d+(?=")

(?<=")文字列に 702546 で始まる他の数字が含まれるリスクがない場合、最初の値はやり過ぎかもしれません。

これを分解する:

(?<=") // a zero-width assertion (lookbehind), so we will only match if preceded by double-quotes
 702546 // literal match
 \d+    // one or more additional digits
 (?=")  // another zero-width assertion (lookahead), so we will only match if followed by double-quotes

基本的に、ゼロ幅アサーションは、一致が成功するために値が存在する必要があることを意味しますが、値は一致の一部にはなりません。ここでそれらを使用するのは、値が引用符で囲まれていることを確認するためであり、引用符を一致の一部にしないためです。

于 2012-09-05T20:27:42.323 に答える