Regex, чтобы игнорировать определенные случаи

У меня довольно неприятная проблема с регулярными выражениями, с которой я мог бы помочь.

У меня есть исходная строка, которая будет выглядеть так;

%t:H\:i\:s

Я пытаюсь выяснить, каким будет правильное выражение регулярного выражения, которое я могу использовать в функции PHP preg_split, которая будет разбивать приведенную выше примерную строку на отдельное двоеточие ‘:’, но оставить строковый литерал ‘:’ указанным. последовательности из раскола.

Таким образом, после успешного завершения, конечный результат будет;

array
(
[0] => %t
[1] => H\:i\:s
)

Я не гуру с регулярными выражениями и пробовал множество стратегий, но пока не повезло. Любая помощь будет очень цениться.

Заранее спасибо.

1

Решение

Вы можете использовать негативный взгляд сзади: preg_split("/(?<!\\\\):/", "%t:H\:i\:s")

DEMO

1

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

Вам не нужно идти за взглядом назад. Просто разделите входную строку в соответствии с \b:\b

$string = '%t:H\:i\:s';
$parts  = preg_split('/\b:\b/', $string);
var_dump($parts);

Выход:

array(2) {
[0]=>
string(2) "%t"[1]=>
string(7) "H\:i\:s"}

Объяснение:

\b:\b будет соответствовать двоеточию, которое предшествует и сопровождается словом символа. Это будет соответствовать двоеточию только в этом t:H часть, потому что есть граница слова существует между t а также :, : а также H

1

Подберите двоеточие и используйте отрицательный взгляд сзади (убедитесь, что двоеточие не иметь обратную косую черту перед ним).

$format = '%t:H\:i\:s';
$parts  = preg_split('/(?<!\\\\):/', $format);
var_dump($parts);
0

Вы можете просто использовать взорвать сдвиг, взорвать, как так

$a = explode(':', '%t:H\:i\:s');
$r = array( array_shift( $a ) );
$r[] = implode(':', $a );
0
По вопросам рекламы [email protected]