كيفية تاريخ من سلسلة تنفجر باستخدام PHP preg_match والتعابير المنطقية

StackOverflow https://stackoverflow.com/questions/1628186

  •  06-07-2019
  •  | 
  •  

سؤال

وأنا تجهيز سلاسل مع تاريخ في مكان ما في ذلك. هناك طرق مختلفة يمكن أن يظهر التاريخ في هذه السلسلة:

و"... 2009/11/01 18: 00-21: 00 ..." أو "... 2009/11/01 18: 00-02.11.2009 15:00 ..." أو "... 2009/11/01 18:00 ..."

وبغض النظر كيف يظهر التاريخ أنا فقط بحاجة تاريخ بداية "01.11.2009 18:00". حتى اذا كانت هناك مباراتين انها مجرد أول واحد. كيف يمكنني عزل / ينفجر هذا من السلسلة الكاملة في بي. أي فكرة؟

وأعتقد أنني بحاجة إلى خلق نمط مع التعابير المنطقية ومن ثم مطابقة ذلك مع preg_match. هل هذا هو الطريق؟ للأسف أنا لست في التعابير المنطقية كثيرا. يمكن لأي شخص يساعد في الحصول على بلدي كتلة تاريخ واحد من سلسلة عشوائية؟

هل كانت مفيدة؟

المحلول

$matches = array();
$desired_date = '';
preg_match('/\d{2}\.\d{2}\.\d{4} \d{2}:\d{2}/', $string_containing_dates, $matches);
if (isset($matches[0])) $desired_date = $matches[0];

نصائح أخرى

وجرب:

$s = "… 01.11.2009 18:00-21:00 …… 01.11.2009 18:00-02.11.2009 15:00 …… 01.11.2009 18:00 …";
preg_match_all('!(\d{2}\.\d{2}\.\d{4}) \d{2}:\d{2}(-\d{2}:\d{2}|-\d{2}\.\d{2}\.\d{4} \d{2}:\d{2})?!', $s, $matches);
print_r($matches[1]);

وإذا تم تنسيقه تاريخك على النحو التالي سيكون لديك دائما نفس عدد الأحرف لكل تاريخ. هل يمكن بعد ذلك استخدام SUBSTR بسيط () لاتخاذ بداية حرف X:

// example date strings
$date = date('m.d.Y h:i:S');
$date2 = date('m.d.Y h:i:S', strtotime('+50 days'));
$date_str = $date . '-' . $date2;

// get the first 10 characters for the date
$match = substr($date_str, 0, 10);

وهذه محاولة واحدة:

preg_match_all(
    '/([0-9]{2}\.[0-9]{2}\.[0-9]{4} [0-9]{2}:[0-9]{2})' // linebreak added
    . '(?:-(?:[0-9]{2}\.[0-9]{2}\.[0-9]{4} )?(?:[0-9]{2}:[0-9]{2})?)?/',
    '" 01.11.2009 18:00-21:00 " or " 01.12.2009 18:00-02.12.2009 15:00 " '
    . 'or " 01.01.2009 18:00 "',
    $matches
);

print_r($matches[1]);
// "01.11.2009", "01.12.2009", "01.01.2009"

ويمكنك استخراج التاريخ الأول في هذا الشكل باستخدام وظيفة أدناه:

function find_date($string) {
    preg_match("/\d{2}\.\d{2}\.\d{4} \d{2}:\d{2}/",$string,$matches);
    return $matches[0];
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top