Операция над строкой в ​​PHP. Удалить часть строки

Как я могу удалить часть строки из примера:

@@ lang_eng_begin @@ тест @@ @@ lang_eng_end
@@ lang_fr_begin @@ @@ школы lang_fr_end @@
@@ lang_esp_begin @@ test33 @@ @@ lang_esp_end

Я всегда хочу тянуть середину строки: test, school, test33, из этой строки.
Я читал про ltrim, substr и прочее, но у меня не было хороших идей, как это сделать. Поскольку каждая из строк может иметь другую длину, например:

‘eng’, ‘fr’

Я просто хочу иметь строку от середины между @@ и @@. Мэй, кто-то может мне помочь? Я старался:

foreach ($article as $art) {

$title = $art->titl = str_replace("@@lang_eng_begin@@", "", $art->title);
$art->cleanTitle = str_replace("@@lang_eng_end@@", "", $title);
}

Но там

@@ @@ lang_eng_end

можно изменить на

@@ @@ lang_ger_end

в следующем ряду, так что я знаю, как это исправить

0

Решение

Если ваши строки всегда в этом формате explode путь выглядит просто:

$str = "@@lang_eng_begin@@test@@lang_eng_end@@ ";
$res = explode("@@", $str)[2];
echo $res;

Вы можете использовать регулярное выражение и извлечь значение между незапускающимися @@ и следующий @@:

$re = "/(?!^)@@(.*?)@@/";
$str = "@@lang_eng_begin@@test@@lang_eng_end@@ ";
preg_match($re, $str, $match);
print_r($match[1]);

Увидеть PHP демо. Здесь регулярное выражение соответствует @@ это не в начале строки ((?!^)@@), а затем фиксирует в группе 1 любые 0+ символов, кроме новой строки, как можно меньше ((.*?)) до первого @@ подстрока.

Или заменить все @@...@@ подстроки с `preg_replace:

$re = "/@@.*?@@/";
$str = "@@lang_eng_begin@@test@@lang_eng_end@@ ";
echo preg_replace($re, "", $str);

Увидеть еще одна демка. Здесь мы просто удаляем все непересекающиеся подстроки, начинающиеся с @@, то есть любые 0+ символов кроме новой строки до первого @@,

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]