説明
この式は次のようになります。
- 2013 年を見つける
- n 番目の位置で列ヘッダーをキャプチャします
- 次の行の n 番目の位置の値を取得します
n 番目の位置を設定するには、示された両方の数値を目的の n の値に変更する必要があることに注意してください。ここに示す式は、3 番目の位置をキャプチャします。
^\s*2013[^\r\n]*[\r\n]+(?:\s+([a-z]+)(?=[\r\n\s]|\Z)){3}[^\r\n]*?[\r\n]+(?:[^\r\n0-9,.]+([0-9,.]+)(?=[\r\n\s]|\Z)){3}
^ ^
| |
これが機能するのは、キャプチャ グループを n 回繰り返すことによって、正規表現エンジンが最後に成功した一致のみを記憶するためです。ルーチンでは、返された配列をテストして、2 番目のキャプチャに値があるかどうかを確認し、それを使用します。
例
サンプル テキストに存在しない 4 番目の位置を示す実際の例: http://www.rubular.com/r/GUw7yLfLrQ: http://www.rubular.com/r/GUw7yLfLrQ
正常に見つかった 3 ポジションを示すライブの例: http://www.rubular.com/r/h8Y9fKK33c
サンプルテキスト
2013
Jan Feb March April May June
34,101.2 12,342.7 12,451.5
Value
コード
言語を指定しなかったので、ここでは式がどのように機能するかを簡単に示すために PHP を使用しています。
<?php
$sourcestring="your source string";
preg_match('/^\s*2013[^\r\n]*[\r\n]+(?:\s+([a-z]+)(?=[\r\n\s]|\Z)){3}[^\r\n]*?[\r\n]+(?:[^\r\n0-9,.]+([0-9,.]+)(?=[\r\n\s]|\Z)){3}/imsx',$sourcestring,$matches);
echo "<pre>".print_r($matches,true);
?>
マッチ
[0] => 2013
Jan Feb March April May June
34,101.2 12,342.7 12,451.5
[1] => March
[2] => 12,451.5