Регулярен израз

dakata__92

Super Moderator
Как с регулярен израз да премахна от текста <br и <br</a> /> като второто искам да го заместя с </a>. Предполагам, че ще стане с два регулярни израза, не с един понеже искам <br да бъде преместен с първия, а <br</a> /> да го заместя. :)

HTML:
<a href="http://www.emotion.bg/posting.php?mode=reply&f=39&sid=953653cbeade3538c35a5accc2c25c7a&t=5#preview<br" target="_blank">http://www.emotion.bg/posting.php?mode=reply&f=39&sid=953653cbeade3538c35a5accc2c25c7a&t=5#preview<br</a> />
 
<a href="http://www.emotion.bg/posting.php?mode=reply&f=39&sid=953653cbeade3538c35a5accc2c25c7a&t=5#preview" target="_blank">http://www.emotion.bg/posting.php?mode=reply&f=39&sid=953653cbeade3538c35a5accc2c25c7a&t=5#preview</a> />

Това в червеното остава пък сега :)
 
хмм.. нарочно съм задал първо да търси за <br</a> /> за да не се получи точно това и при мен работи безотказно.. но ето ти с два:

PHP:
$link = preg_replace('/<br/','',$link);
$link = preg_replace('/(<\/a>) \/>/','$1',$link);
 
Забелязах, ноо пак не става. Ето такааа викам нещата и този <br идва от nl2br :
Код:
function http($match)
	{
		$text = preg_replace('/<br/','',$match[1]);
		return '<a href="'.$text.'" target="_blank">'.$text.'</a>';
	}
	$text = preg_replace_callback("/(^(http|https)(\S+))/s","http",$text);
 
Идеята е когато се въведе линк да го преубразува в хреф връзка:
http://www.emotion.bg/posting.php?mode=reply&f=39&sid=953653cbeade3538c35a5accc2c25c7a&t=5#preview

Слага се това като текст, минава го и nl2br и от там става

http://www.emotion.bg/posting.php?mode=reply&f=39&sid=953653cbeade3538c35a5accc2c25c7a&t=5#preview<br />
и явно вече входния текст е само

http://www.emotion.bg/posting.php?mode=reply&f=39&sid=953653cbeade3538c35a5accc2c25c7a&t=5#preview<br

заради /(^(http|https)(\S+))/s .

Става е така след промяната

<a href="http://www.emotion.bg/posting.php?mode=reply&f=39&sid=953653cbeade3538c35a5accc2c25c7a&t=5#preview<br" target="_blank">http://www.emotion.bg/posting.php?mode=reply&f=39&sid=953653cbeade3538c35a5accc2c25c7a&t=5#preview<br</a> />

а след твоя код се получава така

<a href="http://www.emotion.bg/posting.php?mode=reply&f=39&sid=953653cbeade3538c35a5accc2c25c7a&t=5#preview" target="_blank">http://www.emotion.bg/posting.php?mode=reply&f=39&sid=953653cbeade3538c35a5accc2c25c7a&t=5#preview</a> />
 
Оправих се +1 :) Само да те попитам този код:
$text = preg_replace("/(^(http|https)(\S+))/s","http",$text);
как да го преобразувам така, че да не взима 1 резултат иии да не взима примерно http от вече готов <a href='http://'>text</a>. Като го махна се получава, но ми бърка останалия ббкод :)
 
Първоначалния проблем както може би сам разбра беше от твоя регулярен израз (^(http|https)(\S+))/s който пропуска /> и затова се получаваше "/>" отзад.
За въпроса ти :
preg_replace_callback('/(?<!<a href=")(https?:\/\/(\S+))/',...

Ето същия пример без да мачва и <br и различни други хтмл тагове

'/(?<!<a href=")(https?:\/\/([^<>\s]+))/'

ПП.Снощи имах проблеми с интернета и неможах да отговоря.
 

Горе