Почему в моем результате Regex.Replace () появляется «$ 1»?

Я пытаюсь написать регулярное выражение, чтобы переписать URL-адреса, чтобы они указывали на прокси-сервер.

bodystring = Regex.Replace(bodystring, "(src='/+)", "$1" + proxyStr);

Идея этого выражения довольно проста, в основном найти экземпляры «src = '/» или «src =' //» и вставить в этот момент URL-адрес PROXY. В целом это работает, но иногда я встречал случаи, когда буквальный «$ 1» оказывался в строке результата.

Для меня это не имеет смысла, потому что если совпадений не было, то зачем вообще что-то заменять?

К сожалению, я не могу привести простой пример, потому что пока это происходит только с очень большими строками, но я хотел бы концептуально знать, что могло бы заставить такое случиться.

Кстати, я попытался переписать это выражение, используя положительный просмотр назад, как показано ниже:

bodystring = Regex.Replace(bodystring, "(?<=src='/+)", proxyStr);

Но в результате на выходе появляется proxyStr TWICE, если входная строка содержит «src = '//». Для меня это тоже не имеет особого смысла, потому что я думал, что "src =" должен присутствовать во входных данных дважды, чтобы proxyStr дважды попал в выходные данные.

8
задан Locksleyu 8 December 2011 в 15:08
поделиться