php regex لا backslash
سؤال
لذلك لم أفعل أي regexps لفترة من الوقت ، لذلك اعتقدت أنني سأقوم بالفرشاة على ذاكرتي. أحاول تحويل سلسلة مثل a*b*c
داخل a<b>b</b>c
. لقد حصلت بالفعل على هذا العمل ، لكنني الآن أريد الاحتفاظ بسلسلة مثل a\*b\*c
من التحول إلى a\<b>b\</b>c
, ، ولكن بالأحرى في a*b*c
. إليك الرمز الذي أستخدمه الآن:
$string = preg_replace("/\*([\s\S]*?)\*/", "<b>$1</b>", $input);
لقد حاولت وضع هذا \\\\{0}
في قبل النجمة ، وهذا لم ينجح. ولا فعل [^\\\\]
.
المحلول
جرب Lookbehind السلبي:
"/(?<!\\\\)\*([\s\S]*?)(?<!\\\\)\*/"
هذا يطابق فقط أ *
إذا لم يسبقه أ \
.
هذا هش ، رغم ذلك ؛ سوف يفشل أيضًا إذا كانت السلسلة escaped backslash \\*bold* text
.
لا تنتمي إلى StackOverflow