php首次出现一个字母时拆分字符串

时间:2013-09-24 19:18:54

标签: php regex string split explode

我有以下字符串

$string = "18/05-01/06 01/06-06/07 06/07-22/08 22/08-14/09 DR Record + 2 21.47 20.24 27.15 20.24 BE Record + 2 24.05 22.68"

我想在找到的第一个字母上分开它(每次字母都不一样)。我发现了一个类似的问题,其中包含以下示例

$split = explode('-', 'orange-yellow-red',2);
echo $split[1]; //output yellow-red

但这是假设你知道这封信是什么。有没有办法指定任何字母?我之前使用过preg split,但这不能限制,而且我对正则表达式也没那么好。

如果爆炸可以与正则表达式一起使用,那么这样的东西可能会起作用,但这只是一个例子,因为这不起作用。

$string = "18/05-01/06 01/06-06/07 06/07-22/08 22/08-14/09 DR Record + 2 21.47 20.24 27.15 20.24";
$split = explode([A-Za-z], $string,2);

2 个答案:

答案 0 :(得分:2)

使用preg_split

$string = "18/05-01/06 01/06-06/07 06/07-22/08 22/08-14/09 DR Record + 2 21.47 20.24 27.15 20.24 BE Record + 2 24.05 22.68"

$stringArray = preg_split("/[a-zA-Z]/",$string,2);

[a-zA-Z]告诉它找到第一个字母,然后它将从那里拆分

$stringArray将保留两个结果字符串,请注意它会删除它分割的字母

你可以使用preg_match获取两个字符串,这样它就不会删除第一个字母

preg_match("/([^a-zA-Z]+)(.*)/",$string,$Matches);

这里正则表达式告诉它捕获到第一个字母的所有内容,然后捕获那之后的所有内容

$Matches[1]将包含

18/05-01/06 01/06-06/07 06/07-22/08 22/08-14/09 

$Matches[2]将包含

DR Record + 2 21.47 20.24 27.15 20.24 BE Record + 2 24.05 22.68

$Match[0]包含匹配的整个字符串。

答案 1 :(得分:0)

尝试preg_split

preg_split('/[a-z]/i', $string, 2);

我看到你想保留这封信 - 如果你想要它之前的字符串,请使用lookbehind:

preg_split('/(?<=[a-z])/i', $string, 2);

如果你想让它与字符串一起使用,请使用前瞻:

preg_split('/(?=[a-z])/i', $string, 2);

如果您希望将它分开,请增加分割数量并同时使用它们。

preg_split('/(?<=[a-z])|(?=[a-z])/i', $string, 3);

在这里:see it in action