تجاهل لاحقة اختياري مع التعابير المنطقية الجشع

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

سؤال

وأنا أؤدي مطابقة التعابير المنطقية في. NET ضد السلاسل التي تبدو مثل هذا:

1;#Lists/General Discussion/Waffles Win
2;#Lists/General Discussion/Waffles Win/2_.000
3;#Lists/General Discussion/Waffles Win/3_.000

وأحتاج لتتناسب مع جزء URL بدون أرقام في النهاية، بحيث أحصل على هذا:

Lists/General Discussion/Waffles Win

وهذا هو التعبير المعتاد أحاول:

(?:\d+;#)(?<url>.+)(?:/\d+_.\d+)*

والمشكلة هي أن المجموعة الأخيرة يتم تضمينها كجزء من مباراة المجموعة الأوسط. لقد حاولت ايضا بدون * في نهاية ولكن بعد ذلك فقط السلسلة الأولى أعلاه المباريات وليس بقية.

ولدي تمكين الخيار متعدد الخطوط. أي أفكار؟

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

المحلول

وهناك عدد قليل من البدائل المختلفة:

@"^\d+;#([^/]+(?:/[^/]+)*?)(?:/\d+_\.\d+)?$"

وهذه المباريات كما القليلة شرائح مسار ممكن، تليها اختياري الجزء الأخير، ونهاية السطر.

@"^\d+;#([^/]+(?:/(?!\d+_\.\d+$)[^/]+)*)"

وهذا يتطابق مع أكبر عدد ممكن من شرائح مسار ممكن، طالما أنها ليست جزء الرقم في نهاية السطر.

@"^\d+;#(.*?)(?:/\d+_\.\d+)?$"

وهذه المباريات كما قليل من الشخصيات ممكن، تليها اختياري الجزء الأخير، ونهاية السطر.

نصائح أخرى

هل يمكن أن تحاول

^(\d+;#)([^/]+(/[^\d][^/]*)*)

ووالحصول على مجموعة 2ND. المجموعة الأولى يطابق 1;#. يتم تقسيم المجموعة الثانية في الجزء الأول أو URL (يفترض أن تحتوي على أي حرف آخر من /)، ثم تطابق أي عدد من مجموعات /، تليها غير أرقام، تليها أي شيء آخر غير /.

هذا الموقع ، ويبدو أن تفعل ما تريد. محاولة إعطائها مع بعض مزيد من العينات.

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