0

私は真ん中に年があるこの文字列を持っています。年とその前後のすべてを抽出したい。

次の個々の正規表現を使用しています。

  1. 抽出日:'/\d{4}\b/'
  2. 日付より前のすべてを抽出します: '/(.*?)\d{4}\b/';(結果から日付を除外する方法はわかりませんが、それは問題ではありません...)
  3. 日付以降のすべてを抽出: '/d{4}\/(.*?)\b/'(これは機能していません)
4

1 に答える 1

5
$str = 'The year is 2048, and there are flying forks.';
$regex = '/(.*)\b\d{4}\b(.*)/';
preg_match($regex,$str,$matches);

$before = isset($matches[1])?$matches[1]:'';
$after = isset($matches[2])?$matches[2]:'';

echo $before.$after;

編集:複数年の経験に関するOP(ルイス)のコメントに答えるには:

$str = 'The year is 2048 and there are 4096 flying forks from 1999.';
$regex = '/(\b\d{4}\b)/';
$split = preg_split($regex,$str,-1,PREG_SPLIT_DELIM_CAPTURE);
print_r($split);

$split次のような配列を提供します。

Array
(
    [0] => The year is 
    [1] => 2048
    [2] =>  and there are 
    [3] => 4096
    [4] =>  flying forks from 
    [5] => 1999
    [6] => .
)

この2番目の例は、解析可能なデータの仮定に伴うリスクも示しています(4096のフォークの数は4桁の年のフォークの数と一致することに注意してください)。

于 2013-02-25T11:57:19.117 に答える