Я считаю, что причина, по которой он не будет соответствовать одиночным символам, заключается в том, что у вас есть два экземпляра [^/]
в вашем регулярном выражении. Это означает, что для правильного совпадения требуется как минимум два символа, не являющиеся косой чертой. Быстрое решение этой проблемы - использовать оператор OR с регулярным выражением для обработки этого случая. Вот модифицированная версия вашего регулярного выражения, которая соответствует всем вашим примерам:
((^[^/].*[^/]$)|^[^/]$)
Это можно разбить на два сегмента
(^[^/].*[^/]$)
эта первая часть является сокращенной версией вашей и будет захватывать любые строки длиной 2 или более, которые не начинаются и не заканчиваются sla sh.
Вторая часть на другой стороне оператор ИЛИ (|
) - это ^[^/]$
Это будет соответствовать односимвольным строкам, которые не являются sla sh.