Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
php在第一次出现字母时分割字符串_Php_Regex_String_Split_Explode - Fatal编程技术网

php在第一次出现字母时分割字符串

php在第一次出现字母时分割字符串,php,regex,string,split,explode,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 ye

我有以下字符串

$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,但这不能限制,而且我对regex也不是很好

如果explode可以与regex一起使用,那么类似的东西可能会起作用,但这只是一个示例,因为它不起作用

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

我知道你想保留这封信-如果你想让它与之前的字符串保持一致,请使用lookback:

preg_split('/(?<=[a-z])/i', $string, 2);
如果要将其分开,请增加拆分的数量并同时使用这两种方法

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

我知道你想保留这封信-如果你想让它与之前的字符串保持一致,请使用lookback:

preg_split('/(?<=[a-z])/i', $string, 2);
如果要将其分开,请增加拆分的数量并同时使用这两种方法

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

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

$stringArray
将保存两个结果字符串,请注意,它会取出拆分的字母

不过,您可以使用获取两个字符串,这样它就不会去掉第一个字母

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

使用

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

$stringArray
将保存两个结果字符串,请注意,它会取出拆分的字母

不过,您可以使用获取两个字符串,这样它就不会去掉第一个字母

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

等等..什么?如何拆分一个不知道是什么的字母?@Rohit类似于拆分[a-Za-z],所以实际上是在第一个字母上拆分,而不是任何其他类型的字符。等等..什么?如何在一个不知道是什么的字母上拆分?@Rohit类似于拆分[a-Za-z],所以实际上是在第一个字母上拆分,而不是任何其他类型的字符。
$stringArray=preg_split(/[a-Za-z]/,$string,2)
是一个错误,不是吗?@FrankieTheKneeMan打字错误,忘记了引号!
preg_-match
似乎是我需要的东西!你真的不应该使用preg_-match-在验证上下文之外使用正则表达式匹配整个字符串有点代码味道。FrankieTheKneeMan的第三个解决方案也很好,确实如此nt在开头有额外的数组元素(/[a-zA-Z]/,$string,2)
是一个错误,不是吗?@FrankieTheKneeMan打字错误,忘记了引号!
preg_-match
似乎是我需要的东西!你真的不应该使用preg_-match-在验证上下文之外使用正则表达式匹配整个字符串有点代码味道。FrankieTheKneeMan的第三个解决方案也很好,确实如此如果我把1改成2,效果会很好。唯一的问题是,它会删除拆分的字母?有没有办法在字母前的空格中拆分它?是的,有-你到底想得到什么结果?我想在第一个字母处拆分字符串,并保留两个ar射线项目完整,但分解和拆分操作都会删除分解/拆分部分。我的意思是:您希望字母在它前面的字符串上,还是在它后面的字符串上,或者作为它自己的项目?我希望在它前面拆分,所以它像这样eg
数组([0]=>'18/05-01/06-06/07 06/07-22/08-08-14/09',[1]=>'DR记录+221.4720.2427.1520.24BE记录+224.0522.68')
如果我将1改为2,这就完美了。唯一的问题是,它会删除拆分的字母?有没有办法在字母前的空格上拆分它?是的,有-你实际上在寻找什么结果?我试图在第一个字母处拆分字符串,并保持两个数组项不变,但分解和拆分操作所有操作都会删除分解/拆分部分。我的意思是:您希望字母在它前面的字符串上,还是在它后面的字符串上,或者作为它自己的项目?我希望在它前面拆分字母,所以它是这样的,例如
数组([0]=>'18/05-01/06/06-06/07 06/07-22/08 22/08-14/09',[1]=>'DR Record+2 21.47 20.24 27.15 20.24 BE Record+2 24.05 22.68'));