我有一个相当棘手的小正则表达式问题,我可以使用一些帮助。
我有一个看起来像这样的源字符串;
%t:H\:i\:s
我正在努力想弄清楚正确的正则表达式语句是什么,我可以在PHP preg_split函数中使用它将上面的示例字符串拆分为独立的冒号':',但保留':'字符串文字指定的序列在分割之外。
因此,成功完成后,最终结果将是;
array
(
[0] => %t
[1] => H\:i\:s
)
我不是正则表达的大师,并且已经尝试了许多策略,但没有运气。任何帮助都会非常感激。
提前谢谢。
答案 0 :(得分:1)
您可以使用negative lookbehind:preg_split("/(?<!\\\\):/", "%t:H\:i\:s")
答案 1 :(得分: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
和:
之间存在word boundary,:
和H
答案 2 :(得分:0)
匹配冒号并使用负面的后卫(确保冒号不在其前面有反斜杠。)
$format = '%t:H\:i\:s';
$parts = preg_split('/(?<!\\\\):/', $format);
var_dump($parts);
答案 3 :(得分:0)
你可以像这样使用爆炸移位内爆
$a = explode(':', '%t:H\:i\:s');
$r = array( array_shift( $a ) );
$r[] = implode(':', $a );