2012-03-31 3 views
0

PHPで "The beer party 2011/2012"のような文字列があります。phpの文と年(数字)を区切ります

私はまだこれらの年と文を2つの異なる配列にする方法を理解できませんか?私は\d+\S+\s+を試してみましたが、組み合わせると、それを使用する方法がわからない

$arr[0] = the beer party; 
$arr[1] = 2011/2012 or if its just 2011 then $arr[1] = 2011; 

:このように。

答えて

3
preg_match('/(.*?)\s?(\d{4}(?:\/\d{4})*)$/', $yourString, $matches); 

$matches[1]$matches[2]は日付が含まれていますが含まれています。

+0

ちょっと単純化できるかもしれませんが、 。 +1。 –

1

正規表現 "(。*?)([\ d \ /] +)"などを試してみます。

IS離れてそれを破る:

- 最初のキャプチャグループ、ungreedy方法で、任意の文字(*。?)。 [\ d \ /] - 数字またはリテラル "/"(スラッシュ)です。これは2011 */* 2012のようなものをキャプチャすることです。 ([\ d \ /] +) - 2番目のキャプチャグループが前のステートメントを取得します。

最初のキャプチャグループが欲張りだった場合は、数字リテラルもキャプチャできます。それは不公平なので、2番目のキャプチャグループである最長の貪欲捕捉者を許可するのをやめます。

正規表現の貪欲についての詳細は、http://www.skdevelopment.com/php-regular-expressions.phpを参照してください。

希望すると便利です。

+0

正規表現にエラーがあります。あなたは一致させようとしているリテラルスラッシュをエスケープする必要があります(または異なるデリミタを使用する)。また、あなたの試合は "The beer party/2 2011/2012"のような文字列で壊れます – liquorvicar

+0

正しい!私は実際にそれをエスケープしました。私はそれが何とかテキスタイルで削除されたと思う。 2番目の部分に関しては、これらの例は起こらないと思われました。 –

+0

本当にありがとう、私は正規表現をもっと勉強する必要があります。事はちょうどとても複雑に見えます。 –

0

ターゲット文字列が(つまりスラッシュで区切られた1つまたは複数の4桁の年で終わる)という形式で常にある場合、あなたはこの

preg_match('/(\d{4}(\/\d{4})*)$/', $string, $matches); 

を使用することができますこれは、フォーマット「YYYYの任意の文字列に一致します。 "または" YYYY/YYYY "の文字列を削除して、2つの部分を取得します。

関連する問題