2017-08-31 16 views
-1

完全一致として特定の単語の後に4桁の長さの数字を抽出する正規表現を見つけようとしています。ここでRegex - 特定の単語の後に4桁の数字をグループとマッチしないようにグループ

はテキストです:

FV 7017 FOR SOMETHING 1076,33 USD. 

、ここでは、4桁の番号を抽出するために、私の正規表現です:になります

/FV (\d{4,})/ 

Full match = `FV 7017` 
Group 1 match = `7017` 

がそれですその結果を完全一致として持つために正規表現を使って "FV"単語を除外することは可能ですか?

+2

あなたは宇宙に爆発し、理由だけではなく、 '$試合にはアクセスしない爆発配列 – clearshot66

+3

の一部2を取ることができる[1]'?ここの問題は何ですか?あなたのソリューションはそのまま動作しますが、ルックアラウンドを複雑にする必要はありません。 –

+0

preg_matchは '$ matches [0]'のパターンと一致する完全な文字列を常に返します。あなたが 'shift($ matches);'をしたいのでない限り、それは常に0の位置にあるでしょう。 –

答えて

0

肯定的なlookbehindよりも4ステップ早く、\Kを使用して、フルストリングマッチを再開します。

/FV \K\d{4}/ 

Pattern Demo

PHPの実装:

$string='FV 7017 FOR SOMETHING 1076,33 USD.'; 
echo preg_match('/FV \K\d{4}/',$string,$out)?$out[0]:'fail'; 
// output: 7017 
1

はい、それはPHPで可能です:ちょうど

/(?<=FV)\d{4,}/ 

いわゆる正の後読みassertiondemo)を使用することは、「4桁以上に一致するが、それらは'FV '配列が先行している場合にのみ」として読み込みます。

関連する問題