Mam sobie taki oto wzór który ma mi usuwać wszystkie teksty prócz wybranych w zmiennej $mode
Kod
$patern="(".$startPattern."[^".$mode."][\s\S]+".$endPattern."[^".$mode."]|".$startPattern.".|".$sniePattern.".)";
$replace = "";
$tmp = preg_replace($patern, $replace, $string);
$replace = "";
$tmp = preg_replace($patern, $replace, $string);
Przykładowy pattern wygląda tak:
Kod
(#####Start:[^2][\s\S]+#####End:[^2]|#####Start:.|#####End:.)
Gdzie $mode = 2. String do edycji:
Cytat
ALa ma kota. #####Start:1 kotek ma ale#####End:1 #####Start:2 kotek ma wała #####End:2 #####Start:3 2kotek ma 2ale#####End:3 #####Start:4 2kotek ma 2wała #####End:4
Przy ustawieniu $mode na 1 wynik jest poprawny i wyświetla tylko alternatywe pierwszą a resztę usuwa:
Cytat
ALa ma kota. kotek ma ale
Ale juz przy każdej innej niż jeden jest problem bo usuwa wszystko, nie wiem dlaczego
Wynik dla $mode innej niż 1:
Cytat
ALa ma kota.
Gdzie jest problem? z góry dziękuję za odpowiedź

Dobra błąd znalazłem ale nie umiem sformułować teraz odpowiedniego wzorca żeby pomogło.
Chodzi o to, że przy tym wzorcu on lecąc pokolei po stringu znajduje ciąg "#####Start:1" i pasuje mu to do wzorca, dalej '[\s\S]' pozwalaja uzyc wszystkiego co napotka na drodze a kończy na "#####End:4" co tez do wzorca pasuje i dlatego usuwa wszystko.
Doszedłem do tego żeby gdzieś w tym miejscu kodu ("[\s\S]") dodać wzorzec aktywnej $mode ale nie wiem jak to zrobić.
Napisałem taki kod: (nie działa)
Kod
$string = "ALa ma kota. #####Start:1 kotek ma ale#####End:1 #####Start:2 kotek ma wala #####End:2 #####Start:3 2kotek ma 2ale#####End:3 #####Start:4 2kotek ma 2wala #####End:4";
$startPattern = '#####Start:';
$endPattern = '#####End:';
$mode = '2';
$patern="(".$startPattern."[^".$mode."][^".$startPattern.$mode."[\s\S]+".$endPattern.$mode."]+".$endPattern."[^".$mode."]|".$startPattern.".|".$endPattern.".)";
$startPattern = '#####Start:';
$endPattern = '#####End:';
$mode = '2';
$patern="(".$startPattern."[^".$mode."][^".$startPattern.$mode."[\s\S]+".$endPattern.$mode."]+".$endPattern."[^".$mode."]|".$startPattern.".|".$endPattern.".)";