Регулярное выражение для соответствия двоеточию, но не обратной косой черты

Я ищу PCRE для PHP, чтобы соответствовать двоеточию, но не двоеточие с обратной косой чертой (\:).
Я попробовал это, но это не работает, потому что теперь я знаю, ^\\ будет соответствовать любому символу, кроме обратной косой черты.

/[^\\\]:/

Мне нужно получить только двоеточия, а не сбежавшие двоеточия.

1

Решение

Если вы не хотите соответствовать предыдущему символу, используйте отрицательный lookbehind:

/(?<!\\):/

Обратите внимание, что вам придется сделать дополнительное экранирование при использовании приведенного выше выражения в качестве строки PHP, потому что вы должны экранировать обратную косую черту как для PHP, так и для PCRE:

'/(?<!\\\\):/'

Преимущество этого состоит в том, что он будет соответствовать двоеточию в начале строки и не будет захватывать никаких дополнительных символов.

Refiddle

1

Другие решения

Просто удалите третью обратную косую черту:

/[^\\]:/

Протестировано с этой строкой:

This : is : a \: test

Вы получите первые две двоеточия в результате.

http://refiddle.com/1glg

0

По вопросам рекламы [email protected]