Я хотел бы сопоставить все вхождения /
, которые не заключены в кавычки (т. е. "
).
Например, это будет результат совпадений
HKEY/
"ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ"/
"test/123"/
HKEY/
"ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ"/
тест
HKEY/
SOFTWARE/
"test/123"/
HKEY/
SOFTWARE/
test//
test
HKEY/
SOFTWARE/
"тест
HKEY/
SOFTWARE/
"тест/
До сих пор я пробовал использовать /((?=[^""]*(?:""[^""]*""[^""]*)*$))
.
Я просмотрел другие ответы, но они не работают (или написаны на разных языках).
Привет @bobblebubble, я хочу заменить их и сделать \ (обратные косые черты). Я не хочу сопоставлять какую-либо строку, а только подходящие /
Логика вашего текущего регулярного выражения заключается в том, чтобы смотреть вперед на предмет сбалансированных котировок. Но если у вас незакрытые котировки, это не сработает. Однако вы можете просто переключить направление, чтобы посмотреть назад, в сторону начала.
(?m)/(?<=^(?:[^"\n]*"[^"\n]*")*[^"\n]*)
Посмотрите эту демонстрацию на Regex Storm (отбросьте (?m) и \n
, если обрабатываются отдельные строки, добавьте escape-символы).
Чтобы просто удалить эти косые черты, достаточно заменить например ("[^"\n]*(?:"|$))|/+ на $1. Это не работает, если вам нужно заменить совпадающий символ. хотя с чем-то еще.
В других PCRE/PHP вариант с глаголами можно использовать для замены: "[^"\n]*(?:"|$)(*SKIP)(*F)|/
Маленький вопрос: как будет выглядеть выражение, если я не хочу ничего сопоставлять после //
?
@GhostVaibhav Если возникла другая проблема, создайте новый вопрос. Если вы хотите добавить условие, чтобы не соответствовать косым чертам после двойной косой черты, просто прикрепите отрицательный просмотр: (?<!//.+) (см. это демо).
Хотите удалить эти или сделать что-то еще?