1

我有以下字符串

$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,但这不能限制,而且我对正则表达式也不是很好。

如果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";
$split = explode([A-Za-z], $string,2);
4

2 回答 2

3

尝试preg_split

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

我看到您想保留这封信 - 如果您希望它与之前的字符串一起使用,请使用后视:

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

如果您希望它与后面的字符串一起使用,请使用前瞻:

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

如果您想将其分开,请增加拆分次数并同时使用两者。

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

给你:看看它在行动

于 2013-09-24T19:27:27.347 回答
1

使用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]保存匹配的整个字符串。

于 2013-09-24T19:29:38.170 回答