URL заменяет регулярное выражение - PullRequest
0 голосов
/ 14 марта 2010

Я пытаюсь создать URL, который добавляет / ко всем hrefs и srcs в строке. Он должен только добавить / к URL, которые не имеют http:// в начале, и которые еще не имеют /.

Если у нас есть это:

<a href="ABC">...
<img src="DEFG">...
<a href="/HIJ">...
<a href="http://KLMN">...

Результаты должны быть примерно такими:

<a href="/ABC">...
<img src="/DEFG">...
<a href="/HIJ">...
<a href="http://KLMN">...

Это то, к чему я подходил до сих пор:

&(href|src)="?!(\/|http::\/\/)(.+)"

И замена будет

$1="/$2"

Хотя это не работает.

  • Что я делаю не так?
  • Как должно выглядеть работающее регулярное выражение

Ответы [ 3 ]

1 голос
/ 14 марта 2010

Может быть, достаточно изменить только базовый URI с помощью элемента base :

<base href="/">

Теперь базовый путь URI равен / вместо пути URI текущего документа. Но обратите внимание, что это влияет на все относительные URI, а не только на те, которые имеют относительный путь URI.

0 голосов
/ 14 марта 2010

Это будет соответствовать тегам с href или src в нем, а первая группа содержит адрес.

(<[^<]*?(?:href|src)=")(?!http|/)(.+?)("[^<]*?>)

И заменить на:

$1/$2$3
0 голосов
/ 14 марта 2010
$str = preg_replace('/(href|src)="([^\/][^:]*)"/', '\1="/\2"', $str)

Это будет делать то, что вы просите, но есть небольшое исключение, что любая строка, содержащая двоеточие (:), не будет добавлена ​​"/". Это позволяет легко обрабатывать http://, ftp: // и т. Д., Но также не работает для чего-то вроде «abcd: efgh».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...