Как я могу удалить часть строки из примера:
@@ 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
в следующем ряду, так что я знаю, как это исправить
Если ваши строки всегда в этом формате 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+ символов кроме новой строки до первого @@
,
Других решений пока нет …