Regex для замены амперсандов, но не когда они в URL
Итак, у меня есть это регулярное выражение:
&(?!#?[xX]?(?:[0-9a-fA-F]+|\w+);)
Это соответствует всем & в блоке текста
Однако, если у меня есть эта строка:
& & & & & <a href="http://localhost/MyFile.aspx?mything=2&this=4">My Text &</a>
---------------------------------------------------------^
... помеченный & также получает таргетинг - и, поскольку я использую его для замены & 's на &, URL становится недействительным:
http://localhost/MyFile.aspx?mything=2&this=4
D'о! Кто-нибудь знает лучший способ кодирования &, которые не в URL.
2 ответа
Решение
Нет, URL не становится недействительным. HTML-код становится:
<a href="http://localhost/MyFile.aspx?mything=2&this=4">
Это означает, что код, который не был правильно закодирован, теперь правильно закодирован, и фактический URL-адрес, содержащийся в ссылке:
http://localhost/MyFile.aspx?mything=2&this=4
Таким образом, не проблема в том, что символ & в коде закодирован, наоборот, код теперь корректен.
В PowerShell это можно сделать так:
$String ='& & & & & <a href="http://localhost/MyFile.aspx?mything=2&this=4">My Text &</a>'
$String -replace '(?<!<[^<>]*)&', "&"
доходность
& & & & & <a href="http://localhost/MyFile.aspx?mything=2&this=4">My Text &</a>
Рассекая регулярное выражение:
- Осмотр (?
- Все строки будут найдены и заменены.