2010-11-07 4 views
0

Хорошо, я пробовал 2 часа. Пришло время спросить кого-то здесь, в stackoverflow.Сопоставьте все, кроме заданной строки

У меня есть этот исходный HTML:

<div class="post_main"> 
Post Content (has HTML) 
</div><div class="post_email">[...] 
Other Stuff 
<div class="post_main"> 
Post Content (has HTML) 
</div><div class="post_email">[...] 
Other Stuff 
<div class="post_main"> 
Post Content (has HTML) 
</div><div class="post_email">[...] 

и так далее. Я хочу добавить «Что-то» перед каждым сообщением.

Для этого я использую preg_replace, но это не сработает. Так что я на самом деле с помощью

'|<div class="post_main">(.*)</div><div class="post_email">|s 

Как регулярное выражение, в

"</div><div class="post_email">" 

едят из (. *) И у меня есть только одну замену вместо 3.

Теперь, как могу ли я получить этот PREG матч:

Match Everthing включены новой строки, но исключить данную строку (в данном случае:

"</div><div class="post_email">") 

?

Большое спасибо.

ответ

2
function addSomething($str,$add) { 
    $find = '/(<div class=\"post_main\">)/'; 
    $replace = '$1' . $add; 
    return preg_replace($find, $replace, $str); 
} 
+0

Это просто работает. Я делал это неправильно: D – cedivad

2

Ответ от mistabell вполне соответствует вашему делу. Если вы все еще хотите сделать это по-своему - просто добавьте немного "?" после знака '*'. Я имею в виду, как это:

'|<div class="post_main">(.*?)</div><div class="post_email">|s 

Он называет ленивого квантором, и это делает ваше регулярное_выражение менее жадным.

+0

Большое спасибо, у меня была аналогичная проблема, и я исправил ее с помощью этой потрясающей «?» ;) – cedivad