Не совсем уверен, что вы там делаете, поскольку ваш «URI», похоже, уже является регулярным выражением.
Но для совпадения с косой чертой (/
), заключенной между буквенно-цифровыми символами, вы можете использовать:
/(?<=[a-zA-Z0-9]/)(?=[a-zA-Z0-9])
Позитивный взгляд сзади и взгляд вперед позволяют убедиться, что косая черта действительно находится между двумя буквенно-цифровыми символами.
Тест в Windows PowerShell:
PS Home:\> $uri='/1945321/spravka-po-sopostavleniy-prostogo-regulyarnogo-vyrazheniya'
PS Home:\> [regex]::matches($uri, '(?<=[a-zA-Z0-9])/(?=[a-zA-Z0-9])') | ft -auto
Groups Success Captures Index Length Value
------ ------- -------- ----- ------ -----
{/} True {/} 24 1 /
{/} True {/} 34 1 /
{/} True {/} 42 1 /
ETA: Если я правильно вас понял, вы хотите заменить косые черты, вставленные между двумя буквенно-цифровыми символами, на \/
, чтобы их избежать, верно?
Затем заменить следующее
([a-zA-Z-0-9])/([a-zA-Z-0-9])
от
\1\\/\2
должно работать. Это не захватывает только косую черту (как вышеописанный метод; из-за ограничений Notepad ++), поэтому мы должны также повторно вставить окружающие символы.
Тем не менее, вы, возможно, все равно захотите найти unescaped slash. Итак, заменив
([^\\])/
от
\1\\/
будет иметь больше смысла, я думаю. Это ищет косую черту, которой не предшествует обратная косая черта.