php preg_split或爆炸。不删除字符

时间:2018-11-25 09:37:39

标签: php regex explode preg-split

我一直在尝试几种方法来解决我的问题,但是发现了较差的解决方法,但是我想知道那里是否还有其他东西。 我有几个子字符串,用逗号分隔。我可以使用preg_split或explode将其拆分为一个数组。但是某些子字符串还包含我不想拆分成单独的数组成员的逗号。我的解决方法是在每个字符串的末尾包含一个句号,然后告诉explode仅在“。,”处进行拆分。 字符串示例:

$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);

我一生都无法想出任何办法告诉程序乔治后面的逗号不是子字符串的结尾。 另一个(相关)问题是,我想在逗号处拆分字符串,但要在数组成员中包含逗号。

==> Henry the horse,
==> Billy the donkey,
==> Harry the mule,
==> George, the hippo,

我的想法只是在之后再次添加它们。有没有更简单的方法? 换句话说,有没有办法在分隔符处进行拆分,但将分隔符保留在数组成员中?

2 个答案:

答案 0 :(得分:0)

您可以使用环视或(*SKIP)(*FAIL)。将,(?! the), the(*SKIP)(*FAIL)|,preg_split()一起使用。

在我的手机上点击

答案 1 :(得分:0)

我猜每个子串必须以大写字母开头。然后这样做:

$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"
]