Вырезать строку из строки / 3 части

Я не хочу разрезать мою строку, как это

a = "dog [hidden] cat [/hidden] fox"

$1 = "dog ";
$2 = " fox";
$hidden = " cat ";

1

Решение

Это было действительно весело возиться.

Прежде всего, нам нужно разбить строку на значимые части:

php > var_dump(preg_split('/(\[hidden\])|(\[\/hidden\])/', 'dog [hidden] cat [/hidden] fox', -1, PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY));
array(5) {
[0]=>
string(4) "dog "[1]=>
string(8) "[hidden]"[2]=>
string(5) " cat "[3]=>
string(9) "[/hidden]"[4]=>
string(4) " fox"}

Отсюда мы хотим найти, когда [hidden] начинается и где это заканчивается. Это будет сделано путем поиска в массиве, чтобы найти их индексы. Однако, поскольку в вашем примере есть только скрытый тег и никаких других тегов, мы знаем, что значение сразу после [hidden] является $hidden, все, прежде чем это $before и индекс hidden плюс 2 это все после него ($after).

$hidden_start_index = array_search ("[hidden]", $my_array);
$before = my_array[hidden_start_index-1];
$after = my_array[hidden_start_index+2];
$hidden = my_array[hidden_start_index+1];

Собрав все это вместе, вы получите это:

// Declare string
$a = 'dog [hidden] cat [/hidden] fox';
// Break it down
$my_array = preg_split('/(\[hidden\])|(\[\/hidden\])/', $a, -1, PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY);
// Find hidden index
$hidden_start_index = array_search ("[hidden]", $my_array);

// Find values
$before = $my_array[$hidden_start_index-1]; // dog
$after = $my_array[$hidden_start_index+2]; // cat
$hidden = $my_array[$hidden_start_index+1]; // fox

Вы можете хотеть чего-то более сложного, но основа логики здесь.

0

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

Вот решение, которое я предлагаю вам:

<?PHP

$text = "dog [hidden] cat [/hidden] fox";

// find the "hidden" words between the tags
preg_match_all("/\[hidden\] ?(.*?) ?\[\/hidden\]/", $text, $hidden);
print_r($hidden[1]);

// find the "visible" words using a diff
$all = array_map("trim",preg_split("/\[\/?hidden\]/", $text));
$visible = array_values(array_diff($all, $hidden[1]));
print_r($visible);

?>

Выход:

HIDDEN WORDS:

Array
(
[0] => cat
)

VISIBLE WORDS:

Array
(
[0] => dog
[1] => fox
)

Вы можете попробовать демо посещение эта ссылка.

0