0

データ例:

029この特定の文字列を抽出します。他のものをキャプチャしないでください。

上記の例では、nの値を定義する3桁のエントリの直後の最初のn文字をキャプチャしたいと思います。IE29文字「この特定の文字列を抽出します。」

ループ内でこれを行うことはできますが、遅いです。ある種の後方参照を使用して、代わりに単一の正規表現ステートメントでこれを実現したいと思います(可能であれば)。何かのようなもの:

(\d{3})(.{\1})
4

3 に答える 3

1

perlを使用すると、次のことができます。

my $str = '029Extract this specific string. Do not capture anything else.';
$str =~ s/^(\d+)(.*)$/substr($2,0,$1)/e;
say $str;

出力:

Extract this specific string.
于 2013-03-22T12:37:31.670 に答える
0

正規表現が必要ですか?

https://stackoverflow.com/tags/regex/infoから:

天使が踏みにじるのを恐れるところに愚か者が殺到する

現代の正規表現の驚異的なパワーと表現度は、騙されやすい人、または愚か者を、文字列に関連するすべてのタスクで正規表現を使用しようとするように誘惑する可能性があります。これは一般的に悪い考えです...

Pythonの3つのライナーは次のとおりです。

foo = "029Extract this specific string. Do not capture anything else."
substr_len = int(foo[:3])
print foo[3:substr_len+3]

そして、これがPHPの3つのライナーです。

$foo = "029Extract this specific string. Do not capture anything else.";
$substr_len = (int) substr($foo,0,3);
echo substr($foo,3,substr_len+3);
于 2013-03-22T12:35:17.963 に答える
0

単一の正規表現ではそれを行うことはできませんが、正規表現が処理を停止する知識を使用してsubstrを使用することはできます。たとえば、JavaScriptでは、次のようなことができますhttp://jsfiddle.net/75Tm5/

var input = "blahblah 011I want this, and 029Extract this specific string. Do not capture anything else.";
var regex = /(\d{3})/g;
var matches;
while ((matches = regex.exec(input)) != null) {
    alert(input.substr(regex.lastIndex, matches[0]));
}

これにより、両方の行が返されます。

I want this
Extract this specific string.

本当に必要なものに応じて、行の先頭から始まる数字のみに一致するように、または最初の一致のみに一致するように正規表現を変更できます。

于 2013-03-22T12:48:00.163 に答える