Wie entfernt man \r\n\r\n aus einem String mit preg_replace()?


tklustig

Erfahrenes Mitglied
#1
Hallo Leute,
eine eigentlich einfache Sache, wenn man weiß, wie's geht. Mittels folgendem Code versuche ich, die Zeichenkette \r\n\r\n aus einem String zu entfernen, leider ohne Erfolg.
Wie geht's richtig?
PHP:
$value = $model->bezeichnung;
$keyword="/\r\n\/";
$string = preg_replace($keyword, " ", $value);
var_dump($string);
die();
da php offensichtlich nicht zwischen / und \ unterscheidet, klappt das natürlich nicht. Es wird die Exception
Code:
preg_replace(): No ending delimiter '/' found
ausgeworfen. Wie muss $keyword folglich richtigerweise definiert werden, damit ich genannte Zeichenkette aus dem String entfernen kann?
Hier noch die Funktion:
PHP:
function Cutten($string2BeChanged, $keyword = null, $replaceWith = null) {
    if ($keyword == null)
        $keyword = "/\r\n\/";
    if ($replaceWith == null)
        $string = preg_replace($keyword, " ", $string2BeChanged);
    else
        $string = preg_replace($keyword, $replaceWith, $string2BeChanged);
    return $string;
}
 
Zuletzt bearbeitet:

Bratkartoffel

gebratene Kartoffel
Premium-User
#2
Hi,

in deinem Regex escapest du dein letztes "/" womit es PHP nicht mehr findet. Folgendes sollte richtig sein:
Code:
/\r\n/
Da du allerdings doppelte Umbrüche entfernen willst sollte folgendes passen:
Code:
/(\r\n){2}
Das funktioniert allerdings nur mit Windows-Zeilenenden, wenn du das auch für Mac und Linux haben willst:
Code:
/((\r\n|\n|\r){2}/
(ungetestet da ich gerade kein PHP zur Hand habe)

Grüsse,
BK
 

tklustig

Erfahrenes Mitglied
#4
Unter Windows folgenden Code getestet, ohne Erfolg. Es gibt zwar keine Exception mehr, allerdings werden die Sequenzen nicht entfernt:
PHP:
.
.
        [
                'attribute' => 'bezeichnung',
                'format'=>'html',
                'label' => Yii::t('app', 'Bez'),
                'value' => function($model) {
                    $value = $model->bezeichnung;
                    $value = Cutten($value);
                    return $value;
                }
            ],
.
.
function Cutten($string2BeChanged, $keyword = null, $replaceWith = null) {
    if ($keyword == null)
        $keyword ="/(\r\n){2}/";
    if ($replaceWith == null)
        $string = preg_replace($keyword, " ", $string2BeChanged);
    else
        $string = preg_replace($keyword, $replaceWith, $string2BeChanged);
    var_dump($string);
    die();
    return $string;
}
 

tklustig

Erfahrenes Mitglied
#6
Folgender Wert für $keyword wirft folgende Exception aus:
Code:
 $keyword = "/(?:\r?\n)/{2}";

PHP Warning – yii\base\ErrorException
preg_replace(): Unknown modifier '{'
Folgender Wert für $keyword wirft zwar keine Exception aus, ist aber ineffektiv(siehe Anhang)
PHP:
 $keyword = "/(\r\n){2}/";
PHP:
 var_dump($string);
die();

X:\xampp\htdocs\yii2_ErkanImmo\frontend\views\immobilien\index.php:238:string '<p><span style=\"font-size:20px\"><span style=\"font-family:Times New Roman,Times,serif\"><u><strong>Objektbeschreibung:</strong></u></span></span></p>\r\n\r\n<p><span
Dein RegEx-Ausdruck kann nicht stimmen, denn das $keyword="/r/"; enfernt das r aus dem String!

Website.jpg
 
Zuletzt bearbeitet:

tklustig

Erfahrenes Mitglied
#7
Folgende Funktion tut endlich, was sie soll. Im Gegensatz zu Deiner Lösung sind diese nervigen Steuersequenzen damit endlich verschwunden:
PHP:
function Cutten($string2BeChanged, $keyword = null, $replaceWith = null) {
    if ($keyword == null) {
        $keyword = array();
        $keyword[0] = "/\\\\/";
        $keyword[1] = "/rn/";
        //$keyword[2] = "/(?:\r?\n)/{2}";
        //$keyword[3] = "/(\r\n){2}/";
    }
    if ($replaceWith == null)
        $string = preg_replace($keyword, "", $string2BeChanged);
    else
        $string = preg_replace($keyword, $replaceWith, $string2BeChanged);
    return $string;
}
 
#8
Hi,

eigentlich easy, mit (\r?\n)+. Das Match kannst du entweder ersetzen mit "" (also entfernen) oder alternativ mit $1 ersetzen sodass mehrere aufeinanderfolgende Zeilenumbrüche zu einem einzigen werden.

PHP:
$str = "Lorem ipsum dolor sit amet, consectetur adipisicing elit.

Blanditiis delectus distinctio incidunt, non quaerat quia reprehenderit. Accusantium ad at atque commodi cum cumque delectus doloremque,
dolores dolorum ea ex excepturi fugit ipsum itaque iusto libero magnam molestias neque non obcaecati officiis perferendis, quaerat quis quo





quod quos reiciendis reprehenderit rerum totam ullam veniam voluptatem voluptates voluptatum! Amet asperiores assumenda cupiditate dignissimos dolor


ea eaque eligendi enim expedita illum inventore ipsa laudantium minima minus natus odit


perferendis placeat porro, quae quibusdam quis quisquam, quod quos reiciendis sed temporibus totam velit vero vitae voluptates. Atque aut fugiat odit quam quas
repellendus tempora?";

$str = preg_replace("/(\r?\n)+/", "", $str); // Entfernt alle Zeilenumbrüche
$str = preg_replace("/(\r?\n)+/", '$1', $str); // Macht aus mehreren Umbrüchen einen
 

Neue Beiträge