我有这个字符串:0|DY1497ORYOSLDY932OSLCPH|1|0|0
我需要像那样爆炸它:
0| DY1497 ORY OSL DY932 OSL CPH |1|0|0
$string1 = 'DY1497';
$string2 = 'ORY';
$string3 = 'OSL';
$string4 = 'DY932';
$string5 = 'OSL';
$string6 = 'CPH';
我进行了搜索,但所有我能找到的是当文本与/
,-
等分开时如何爆炸。任何想法?
答案 0 :(得分:9)
最好的选择可能是正则表达式:
if (preg_match('/|(.{6})(.{3})(.{3})(.{5})(.{3})(.{3})|/', $string, $matches)) {
echo $matches[1];
echo $matches[2];
echo $matches[3];
echo $matches[4];
echo $matches[5];
echo $matches[6];
}
这将字符串除以字符长度。您可能需要根据需要进行修改。见http://regular-expressions.info
答案 1 :(得分:2)
如果您知道所需字符的确切位置,我建议使用substr()
答案 2 :(得分:1)
儿子,它看起来就像你在这里搜索一些特定的标记。我认为你可以做的是,让你自己一个阵列,你可能会看起来很小的搜索模式。这里有类似的东西:
$patterns = array('ORY', 'OSL', 'CPH', 'DY[\d]+');
然后你可以让自己成为一个很好的大正则表达式:
$regexp = '/(' . implode('|', $patterns) . ')/';
然后,你要做的是,使用preg_match_all
找到他们中的每一个fellers thisaway:
preg_match_all($regexp, $string, $matches);
现在,你这样做,然后看看你在$matches
中得到了什么。我打赌它有你需要的东西。
答案 3 :(得分:0)
分割由固定长度字段组成的字符串的另一种方法是使用'解包'这非常适合这份工作。
这是一些经过测试的代码,用于演示它:
<?php
$origSource = '0|DY1497ORYOSLDY932OSLCPH|1|0|0';
// expected result
$string1 = 'DY1497';
$string2 = 'ORY';
$string3 = 'OSL';
$string4 = 'DY932';
$string5 = 'OSL';
$string6 = 'CPH';
// get the string we are interested in...
$tempStr = explode('|', $origSource);
$source = $tempStr[1]; // string with fixed length fields
/* debug */ var_dump($source);
// define where the fixed length fields are and the indexes to call them in the output array
$format = 'A6field1/' . 'A3field2/' . 'A3field3/'. 'A5field4/'. 'A3field5/'. 'A*field6/' ; // make it clear where the fields are...
$dest = unpack($format, $source);
/* debug */ var_dump($dest);
?>
答案 4 :(得分:-1)
首先,你必须用一个特殊的字符连接你的字符串,如#,#,$ etc ......
然后你可以爆炸它。
之后你可以在php中使用以下语法来爆发字符串......
<?php
$string= "0|$DY1497$ORY$OSL$DY932$OSL$CPH$|1|0|0";
$pieces = explode("$", $string);
?>
查看结果:---
<?php
foreach ($pieces as $value)
{
echo "piece: $value<br />";
}
?>
我希望它会对你有所帮助。