Может ли какая-либо из приведенных ниже последовательностей присутствовать в вашем вводе?
\\>
\\\>
\\\\>
\
blank
\
tab
\
newline
...
Если так, как вы предлагаете относиться к ним?
Если нет, то проверочные утверждения нулевой ширины выполнят свою задачу при условии, что ваш движок регулярных выражений поддерживает это. Это будет иметь место в любом движке, который поддерживает регулярные выражения в стиле Perl (включая Perl, PHP и т. Д.):
(?<!\\)[ \n\t<>]
Вышеуказанное будет соответствовать любому незапертому пробелу, символу новой строки, символу табуляции или угловым скобкам. В более общем смысле (используя \s
для обозначения любых пробелов, включая \r
):
(?<!\\)\s
В качестве альтернативы, использование дополнительных обозначений без необходимости обратного утверждения нулевой ширины (но, возможно, менее эффективно):
(?:[^ \n\t<>]|\\[<>])
Вы также можете использовать вариацию последнего для обработки случаев \\>
, \\\>
, \\\\>
и т. Д., А также до некоторого конечного числа предыдущих обратных слеш, таких как:
(?:[^ \n\t<>]|(?:^|[^<>])[\\]{1,3,5,7,9}[<>])