Я не хочу разрезать мою строку, как это
a = "dog [hidden] cat [/hidden] fox"
$1 = "dog ";
$2 = " fox";
$hidden = " cat ";
Это было действительно весело возиться.
Прежде всего, нам нужно разбить строку на значимые части:
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
Вы можете хотеть чего-то более сложного, но основа логики здесь.
Вот решение, которое я предлагаю вам:
<?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
)
Вы можете попробовать демо посещение эта ссылка.