我一直在尝试几种方法来解决我的问题,但发现了一个糟糕的解决方案,但我想知道是否还有其他方法。我有一个由几个用逗号分隔的子字符串组成的字符串。我可以使用preg_split或爆炸将其拆分为一个数组。但是有些子字符串也包含逗号,我不想将其拆分为单独的数组成员。我的工作是在每个字符串的末尾都包含一个句号,然后告诉爆炸只在".,"上分裂。示例字符串:
$string = "Henry the horse, Billy the donkey, Harry the mule, George, the hippo";
围绕工作
$string = "Henry the horse., Billy the donkey., Harry the mule., George, the hippo.";
$list = explode('.,',$string);
我想不出任何方法来告诉程序,George后面的逗号不是子字符串的末尾。另一个(相关的(问题是,我想在逗号处拆分字符串,但在数组成员中包含逗号。
==> Henry the horse,
==> Billy the donkey,
==> Harry the mule,
==> George, the hippo,
我的想法只是在之后再次添加它们。有没有更简单的方法?换句话说,有没有一种方法可以在分隔符处进行拆分,但将分隔符保留在数组成员中?
我猜每个子字符串都必须以大写字母开头。这样就可以了:
$string = "Henry the horse, Billy the donkey, Harry the mule, George, the hippo";
preg_match_all("~[A-Z].*?(?:$|,)(?!s*[a-z])~", $string, $result);
$result[0]
将包含以下输出:
[
"Henry the horse,"
"Billy the donkey,"
"Harry the mule,"
"George, the hippo"
]
您可以使用查找或(*SKIP)(*FAIL)
。使用,(?! the)
或, the(*SKIP)(*FAIL)|,
与preg_split()
。
点击我的手机
preg_split
支持标志PREG_SPLIT_DELIM_CAPTURE
。请参阅文档。
分隔符需要在括号中:
php > var_dump(preg_split('/(, )/', 'Henry the horse, Billy the donkey,
Harry the mule, George, the hippo', -1, PREG_SPLIT_DELIM_CAPTURE));
array(9) {
[0]=>
string(15) "Henry the horse"
[1]=>
string(2) ", "
[2]=>
string(16) "Billy the donkey"
[3]=>
string(2) ", "
[4]=>
string(14) "Harry the mule"
[5]=>
string(2) ", "
[6]=>
string(6) "George"
[7]=>
string(2) ", "
[8]=>
string(9) "the hippo"
}