Замяна на всички случаи на нови редове, които не са вътре в етикетите

Имам текст с нови редове в него и бих искал да заменя всички случаи на нов ред, които не са в определени тагове с <br />s. Етикетите са [something][~something], където something може да бъде всичко.

Съжалявам, че не включвам това, което вече опитах, но нямам представа как да накарам регулярен израз да съответства на нещо, което не е в нещо друго. Това изобщо възможно ли е?


person Seth Carnegie    schedule 13.06.2011    source източник
comment
Ще помогне, ако публикувате извадка от html, който се опитвате да замените.   -  person Pedro Lobito    schedule 16.08.2011


Отговори (1)


Като помните, че не трябва да анализирате XML/HTML с регулярен израз и това е пример за това:

#!/usr/bin/perl
#

$in = "foo\nbar\nbaz[something]else\nis\n[~something]\nHappening\n[something]else\nis\n[~something]here\n";
$out = "";

while ($in =~ s/^(.*?)(\[something\].*?\[~something\])//s)
{
  my($before,$during) = ($1,$2);
  $before =~ s/\n/<br \/>/g;
  $out .= $before.$during;
}
$in =~ s/\n/<br \/>/g;
$out .= $in;
print $out;

Да, не на избрания от вас език, но концепцията (разбор на данните на етапи преди вашите тагове и неща вътре във вашите тагове, докато изтривате обработените данни) трябва да бъде преносима.

person Seth Robertson    schedule 13.06.2011
comment
напълно безполезно е да публикувате perl тук за php - person dynamic; 13.06.2011
comment
Всъщност Perl е моят избран език, но съм принуден да използвам PHP. И благодаря, работи като чар, надявам се да мога да го пренеса към PHP и всичко останало. - person Seth Carnegie; 13.06.2011
comment
Не е напълно безполезно да публикувате perl тук. Потребителят задаваше въпрос, базиран на регулярен израз, а preg_match внедрява Perl съвместими регулярни изрази (PCRE). PHP споделя много сходство с Perl. - person Michael Papile; 13.06.2011