تطابق عدد غير متساوٍ من رموز الهروب
-
03-07-2019 - |
سؤال
أحتاج إلى مطابقة بيانات C ++ Preprocessor. الآن ، قد تمتد البيانات المسبقة على خطوط متعددة:
#define foobar \
"something glorious"
قد يتم هروب هذا الانزلاق الخلفي النهائي ، لذا فإن النتائج التالية في سطرين منفصلين:
#define foobar \\
No longer in preprocessor.
والسؤال هو كيف يمكنني مطابقة استمرار الخط الصريح بكفاءة. لدي التعبير التالي الذي أنا فكر في يعمل. في الأساس ، يختبر ما إذا كان عدد الانتشار الخلفي غريب. هل هذا صحيح؟ هل يمكن أن يتم ذلك بشكل أكثر كفاءة؟
/
[^\\] # Something that's not an escape character, followed by …
(?<escape>\\*?) # … any number of escapes, …
(?P=escape) # … twice (i.e. an even number).
\\ \n # Finally, a backslash and newline.
/x
(أنا أستخدم PHP حتى يتم تطبيق قواعد PCRE لكنني أقدر الإجابات في أي regex العامية.)
المحلول
أعتقد أنك تجعل الأمر أكثر صعوبة مما يجب أن يكون. جرب هذا:
/
(?<!\\) # not preceded by a backslash
(?:\\\\)* # zero or more escaped backslashes
\\ \n # single backslash and linefeed
/x
لا تنتمي إلى StackOverflow