У меня довольно неприятная проблема с регулярными выражениями, с которой я мог бы помочь.
У меня есть исходная строка, которая будет выглядеть так;
%t:H\:i\:s
Я пытаюсь выяснить, каким будет правильное выражение регулярного выражения, которое я могу использовать в функции PHP preg_split, которая будет разбивать приведенную выше примерную строку на отдельное двоеточие ‘:’, но оставить строковый литерал ‘:’ указанным. последовательности из раскола.
Таким образом, после успешного завершения, конечный результат будет;
array
(
[0] => %t
[1] => H\:i\:s
)
Я не гуру с регулярными выражениями и пробовал множество стратегий, но пока не повезло. Любая помощь будет очень цениться.
Заранее спасибо.
Вы можете использовать негативный взгляд сзади: preg_split("/(?<!\\\\):/", "%t:H\:i\:s")
Вам не нужно идти за взглядом назад. Просто разделите входную строку в соответствии с \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
Подберите двоеточие и используйте отрицательный взгляд сзади (убедитесь, что двоеточие не иметь обратную косую черту перед ним).
$format = '%t:H\:i\:s';
$parts = preg_split('/(?<!\\\\):/', $format);
var_dump($parts);
Вы можете просто использовать взорвать сдвиг, взорвать, как так
$a = explode(':', '%t:H\:i\:s');
$r = array( array_shift( $a ) );
$r[] = implode(':', $a );