PHP preg_分割结果不正确
我正在尝试学习PHP中的正则表达式,并尝试使用preg_split函数 但这似乎不正确,或者我的理解完全错误 我使用的测试代码是:PHP preg_分割结果不正确,php,regex,preg-split,Php,Regex,Preg Split,我正在尝试学习PHP中的正则表达式,并尝试使用preg_split函数 但这似乎不正确,或者我的理解完全错误 我使用的测试代码是: $string = "test ing "; var_dump(preg_split('/t/', $string)); 我希望得到如下所示的数组: [0] => "es" [1] => " ing " 但以下内容正在被退回: [0] => "" [1] => "es" [2] => " ing " 为什么开头有一个空字符串 我知
$string = "test ing ";
var_dump(preg_split('/t/', $string));
我希望得到如下所示的数组:
[0] => "es" [1] => " ing "
但以下内容正在被退回:
[0] => "" [1] => "es" [2] => " ing "
为什么开头有一个空字符串
我知道我可以使用
PREG\u SPLIT\u NO\u EMPTY
标志来过滤此内容,但它不应该一开始就存在。应该吗?为什么不应该?这就是它的工作原理。split
操作的语义是您拥有以下格式的字符串:
value-delimiter-value-delimiter-value-...-delimiter-value
(请注意,它是以值而不是分隔符开始和结束的。)
因此,如果字符串以分隔符开头,则假定该分隔符前面有一个空值是绝对有效的(因为分隔符应该将某物一分为二)。您通常也不想拒绝两个连续的t
s之间的空字符串,是吗
这正是PREG\u SPLIT\u NO\u EMPTY
的作用。只要确实想要清除那些空字符串,就可以使用它
作为一个简单的示例,您为什么需要默认行为,只需考虑CSV文件。您想在(例如)
处拆分一行代码>。您通常还希望允许空值。现在,如果第一列中的值为空(这意味着该行将以;
开头,您将第一个空字符串完全切掉,然后结果数组中的所有索引突然将对应于不同的列。这就是为什么您希望保留这些空字符串的原因。在许多情况下,您知道有多少分隔符,因此也知道有多少值-并且您希望o能够识别哪个值属于哪个位置。即使其中一些值是空的。它工作100%正确。第一个字符是't',因此它首先在't'上拆分。在第一个't'之前没有任何内容,因此数组结果以空字符串条目开始。这是因为字符串的开头。如果不使用PREG\u SPLIT\u NO\u EMPTY
选项,PREG\u SPLIT
将空字符串视为有效分割
可以这样想:在preg_split
看到一个t
的任何地方,它都会将字符串分为两个块:t
之前的块和之后的块。即使其中一个块中没有任何内容,它仍然很重要。该块只是一个空字符串
对于某些应用程序,这将非常有用——例如,假设您想用某物替换每个t
,但替换太复杂,无法仅使用preg\u replace
。该语言希望您能够选择,因此它保留空分割,除非您明确告诉它不要使用preg\u split\u NO_空的
好的,这就是我的理解有缺陷的地方。它拆分并查看拆分点的后面。