سؤال

وأود أن تتناسب مع الزمن (10،00) من سلسلة مع التاريخ والوقت ( "21.01.08 10.00"). أنا باستخدام التعبير العادي التالي:

new RegExp("\\b[0-9]{1,2}\\.[0-9]{1,2}\\b" "g");

ولكن هذه المباريات 21.01 من 21.01.08 و10.00.

وأنا باستخدام PCRE لي في محرك التعبير regualar.

تحديث:

وأنا آسف، أنا يجب أن يكون أكثر كان أكثر وضوحا. البيانات والوقت هي جزء من سلسلة أكبر. أريد أن استخراج الوقت من هذه السلسلة.

وعلى سبيل المثال:

و"في 21.01.08 من 10.00 طرف ستجري في المكتبة" "21.08.08 - الساعة 10:00 سيكون هناك طرفا فيها" "في 21.08.08 ومن المقرر لك على .... و... ستبدأ في الساعة 10.00"

هل هذا ممكن؟

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

المحلول

ولم التعابير المنطقية الأصلي الخاص بك لا يعمل بسبب \b (كلمة حدود) مباريات في "". في "21.01.08". تحتاج إلى رمز حدود أكثر بقوة:

(?:[^\d:.]|^)(\d\d?[.:]\d\d)(?![.:\d])

وهذا يجسد وقت، في أي من الرموز التي استخدمتها، مع استبعاد التواريخ. لاحظ أنه لا تحقق ذلك الوقت. على سبيل المثال، فإنه تطابق "88:99" التحقق من صحة وقت ممكن ولكن تعقيد النمط بشكل كبير، ومن المرجح أن يكون مبالغة بالنسبة لمعظم الحالات.

وسيكون من الجميل أن استخدام نظرة خلف بدلا من غير التقاط تجميع لكن PCRE لا تدعم متغير العرض نظرة وراء.

نصائح أخرى

^\d{2}\.\d{2}\.\d{2}\s(\d{2}\.\d{2})$

وينبغي أن تفعل خدعة مع دوام جزئي يجري وضعها في مجموعة الالتقاط.

وعلى "التعبير العادي الجديد" لست متأكدا من (جافا ربما؟). في بيرل يمكن أن تحصل على قيمة مثل ...

if ("21.01.08 10.00" =~ m/^\d{2}\.\d{2}\.\d{2}\s(\d{2}\.\d{2})$/g) {
  $time_part = $1;
}

وفي. NET التالية يجب أن تعمل ...

  Regex r = new Regex(@"^\d{2}\.\d{2}\.\d{2}\s(\d{2}\.\d{2})$");
  string dateTimeString = "21.01.08 10.00";
  if (r.IsMatch(dateTimeString)) {
    string timePart = r.Match(dateTimeString).Groups[1].Value;
    Console.Write(timePart);
  }
  Console.ReadKey();

ويمكنك أيضا استخدام التقاط المسماة إذا كنت ترغب في استخدام شيء أقل غموضا ثم مؤشر في مجموعة الالتقاط.

وحاول استخدام

new RegExp("\\b[0-9]{1,2}\\.[0-9]{1,2}$" "g");

و$ يشير إلى نهاية سلسلة

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top