Регулярное выражение для замены пробелов в последовательностях вида src=" и href="

M
На сайте с 18.05.2009
Offline
108
720

Здравствуйте, подскажите пожалуйста регулярное выражение которое ищет пробелы между кавычками в последовательностях вида src="" и href="" и заменяет их на знак нижнего подчеркивания _ . Отблагодарю в репу))

PA
На сайте с 12.02.2016
Offline
24
#1

"в лоб" заменить не получится. вариант с использованием preg_replace_callback


<?php

$txt = <<<EOF
в последовательностях вида src="qqq www ee" и href="fewfwe e fe" и заменяет
src="jhbgsc sdhjgsj hgj"
EOF;

$txt = preg_replace_callback('%(src|href)="(.*?)"%is', 'my_callback', $txt);
echo $txt;


function my_callback($mm){
return $mm[1].'="'.preg_replace('/ /', '_', $mm[2]).'"';
}

результат:


в последовательностях вида src="qqq_www_ee" и href="fewfwe_e_fe" и заменяет
src="jhbgsc_sdhjgsj_hgj"
. . .
J
На сайте с 20.02.2014
Offline
120
jkm
#2
ps axf:
"в лоб" заменить не получится. вариант с использованием preg_replace_callback

Да ладно :)


$txt = <<<EOF
в последовательностях вида src="qqq www ee" и href="fewfwe e fe" и заменяет
src="jhbgsc sdhjgsj hgj"
EOF;

$txt = preg_replace('%(?:src|href)="[^ "]*\K |\G(?!\A)[^ "]*\K %i', '_', $txt);
echo $txt;

https://regex101.com/r/gD1sF8/1

M
На сайте с 18.05.2009
Offline
108
#3
в лоб" заменить не получится. вариант с использованием preg_replace_callback

спасибо!

jkm:
Да ладно :)

$txt = <<<EOF
в последовательностях вида src="qqq www ee" и href="fewfwe e fe" и заменяет
src="jhbgsc sdhjgsj hgj"
EOF;

$txt = preg_replace('%(?:src|href)="[^ "]*\K |\G(?!\A)[^ "]*\K %i', '_', $txt);
echo $txt;

https://regex101.com/r/gD1sF8/1

супер, все работает..спасибо

PA
На сайте с 12.02.2016
Offline
24
#4
jkm:
Да ладно :)

$txt = <<<EOF
в последовательностях вида src="qqq www ee" и href="fewfwe e fe" и заменяет
src="jhbgsc sdhjgsj hgj"
EOF;

$txt = preg_replace('%(?:src|href)="[^ "]*\K |\G(?!\A)[^ "]*\K %i', '_', $txt);
echo $txt;

https://regex101.com/r/gD1sF8/1

спасибо за пример и за хороший повод покурить доку :)

для лучшего понимания/запоминания усложнил себе задачу: попытался правильно обрабатывать одинарные и двойные кавычки т.е. src="qq ' w w" и src='qq"w w'

небольшой вопрос: а можно ли передать "захваченный текст" из первой части выражения во вторую, в ту которая идет после \G ?

пробовал и обращение по \1 и именнованую группу - пока без результата. не рабочий пример: https://regex101.com/r/rK9vE6/2 в нем второе обращение к \1 не работает.

J
На сайте с 20.02.2014
Offline
120
jkm
#5
ps axf:
попытался правильно обрабатывать одинарные и двойные кавычки т.е. src="qq ' w w" и src='qq"w w'

небольшой вопрос: а можно ли передать "захваченный текст" из первой части выражения во вторую, в ту которая идет после \G ?

Если так важны кавычки, то в этом случае удобнее всё-таки preg_replace_callback. Можно целиком захватить строку в кавычках

(['"]).*?\1

или

('[^']*'|"[^"]*")

И далее внутри callback функции обрабатывать как захочешь.

WebJunior
На сайте с 11.06.2010
Offline
155
#6

///////////////

Мой сайт на этом хостинге - https://tuthost.ua/?from=2558 / Верстаю шаблоны (темы с отзывами: https://searchengines.guru/ru/forum/763758, https://searchengines.guru/ru/forum/600404 ).
PA
На сайте с 12.02.2016
Offline
24
#7
jkm:
Если так важны кавычки, то в этом случае удобнее всё-таки preg_replace_callback

интересна была сама возможность: передать "захваченный текст" из первой части выражения во вторую, в ту которая идет после \G

разбираться - так разбираться... :)

обработать кавычки и прочее при помощи preg_replace_callback - не проблема, так и делаю.

для более сложных случаев - уже DOM разбирать.

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий