2016-03-31 23 views
0

私は学術出版物に関する複数のレコードを含む1つの文字列を分割する手段を試そうとしています。一つのレコードと次のレコードを分ける意味のある区切り文字のように便利なものはありません。しかし、私はそれが達成できると信じて、各レコードが日付とコンマとスペースの後に続くパターンを仮定すると(それは単に日付で終わる)追加のレコードが続く場合を除き、 "YYYY-MM -DD "と表示されます。preg_matchのテストは成功しましたが、preg_splitは失敗します

私は、文字列を含む簡単なテストを開始し、正規表現は、私が探していますパターン認識していることを確認している:私は使用して次のステップにそれを取るしようとすると、しかし

$date="2012-09-12, "; 
if (preg_match("/^[0-9]{4}-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1]), $/",$date)) 
    { 
     echo("yes"); 
    }else{ 
     echo("no"); 

を実際のデータとpreg-split()のサンプルでは、​​分割は機能しません。同じパターンに一致

<?php 
$pubs="L.J. Santodonato, Y. Zhang, M. Feygenson, C.M. Parish, M.C. Gao, R.J. Weber, J.C. Neuefeind, Z. Tang, P.K. Liaw~Deviation from high-entropy configurations in the atomic distributions of a multi-principal-element alloy.~NATURE COMMUNICATIONS~6~2015~~~~0~~0~~2015-11-21, S. Liu, M.C. Gao, P.K. Liaw, Y. Zhang~Microstructures and mechanical properties of AlxCrFeNiTi 0.25 alloys.~JOURNAL OF ALLOYS AND COMPOUNDS~619~2015~610~~~0~~0~~2015-11-21"; 
$pubsArray = preg_split("/^[0-9]{4}-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1]), $/", $pubs); 
print_r($pubsArray); 
?> 

データは、例えば文字列$パブの中に発見されたが、私が今まで取得すべて:私はmanual例1から取られたこの単純なテストは、文字列であることスプリットをもたらすために失敗した理由を理解することはできませんbackは、完全な文字列を含む単一の要素を持つ配列です。私は次に試すものについてアイデアがなくなり、どんな提案にも感謝しています。

+0

したがって、上記の文字列の場合、あなたは日に分割さ2つの要素を取得する必要がありますか? –

答えて

0

しかし、私は、各レコードが日付とコンマとスペースで終わるパターン(任意の追加レコードが続く場合を除いて、単に日付で終わる)を仮定すると、達成できると思います。 「YYYY-MM-DD」のようなものである。

このような単純な正規表現を使用できる日付の発生時に文字列を分割しようとしているので、/\d{4}(-\d{2}){2}/です。あなたが日付を検証していないので、すべての月と日付を一致させる必要はありません。

dateに文字列を分割するには、次の正規表現を使用する必要があります。

正規表現:/(?<=\d{4}(-\d{2}){2}),\s*/は、オプションのコンマとスペースが続く日付の発生を探し、私はあなたが出版の日付を維持したいとして,[space]に分割します。

PHPのコード

<?php 
$pubs="L.J. Santodonato, Y. Zhang, M. Feygenson, C.M. Parish, M.C. Gao, R.J. Weber, J.C. Neuefeind, Z. Tang, P.K. Liaw~Deviation from high-entropy configurations in the atomic distributions of a multi-principal-element alloy.~NATURE COMMUNICATIONS~6~2015~~~~0~~0~~2015-11-21, S. Liu, M.C. Gao, P.K. Liaw, Y. Zhang~Microstructures and mechanical properties of AlxCrFeNiTi 0.25 alloys.~JOURNAL OF ALLOYS AND COMPOUNDS~619~2015~610~~~0~~0~~2015-11-21"; 
$pubsArray = preg_split("/(?<=\d{4}(-\d{2}){2}),\s*/", $pubs); 
print_r($pubsArray); 
?> 

Regex101 Demo

Ideone Demo

+1

この提案は、望ましい結果を生成します。どうもありがとうございます!私はRegex101へのリンクにも感謝します。これは非常に便利なツールのようです。 – Monica

+0

@Monica:ようこそ。 –