php需要正则表达式的帮助
我想在PHP中解析和扩展给定的字符串 从 到php需要正则表达式的帮助,php,regex,Php,Regex,我想在PHP中解析和扩展给定的字符串 从 到 有人能帮我吗?提前谢谢 你的问题不是很清楚,但我认为你指的是这样的解决方案: 编辑:现在显示了孔范围,而不仅仅是指定的编号 <?php $string = "0605052&&-5&-7&-8"; $test = '/^([0-9]+)\&+/'; preg_match($test, $string, $res); if (isset($res[1])) {
有人能帮我吗?提前谢谢 你的问题不是很清楚,但我认为你指的是这样的解决方案: 编辑:现在显示了孔范围,而不仅仅是指定的编号
<?php
$string = "0605052&&-5&-7&-8";
$test = '/^([0-9]+)\&+/';
preg_match($test, $string, $res);
if (isset($res[1]))
{
$nr = $res[1];
$test = '/\&\-([0-9])/';
preg_match_all($test, $string, $res);
$result[] = $nr;
$nrPart = substr($nr, 0, -1);
$firstPart = substr($nr, -1);
if (isset($res[1]))
{
foreach ($res[1] as &$value)
{
if ($firstPart !== false)
{
for ($i=$firstPart+1; $i<=$value; $i++)
{
$nr = $nrPart . $i;
$result[] = $nr;
}
$firstPart = false;
}
else
{
$nr = $nrPart . $value;
$result[] = $nr;
$firstPart = $value;
}
}
}
var_dump($result);
}
?>
这提供了:结果[0]=“0605052”
结果[1]=“0605053”
结果[2]=“0605054”
结果[3]=“0605055”
结果[4]=“0605057”
结果[5]=“0605058”
我认为多步骤方法是最好的选择 例如,以此为例
0605052&&-5&-7&-8
:
-
处拆分。结果将是0605052&&
,5&
,7&
,8
0605052&&
将帮助您创建基础。只需找到第一个出现的&
并将子串添加到下一个最后一个数字即可。结果将是060505
。您还需要最后一个数字,因此也需要它(在本例中为2
)\d&
都很容易获取,只需获取字符串的第一个字符(或者如果这些字符可以是多个数字,请再次使用第一次出现的&
方法的子字符串)8
输出:
0605052
0605053
0605054
0605055
0605057
0605058
试着在写你的问题时多下点功夫。更清楚地说明你需要什么,你是如何实现它的,给出你的预期产出和实际产出的例子。试着让它在你自己身上发挥作用,并带来更具体的东西。因此,这不是代码编写服务。:)你想从0605052&&-5&-7&-8中得到0605052??你缺少060553、0605054,它们是由基数的最后一个数字和第一个数字之间的差值生成的。在@MYGz编辑之前,这个问题不清楚,所以我认为对于每一个&-x,只有一个结果,而不是每两个$-x都有一个结果范围。
<?php
$string = "0605052&&-5&-7&-8";
$test = '/^([0-9]+)\&+/';
preg_match($test, $string, $res);
if (isset($res[1]))
{
$nr = $res[1];
$test = '/\&\-([0-9])/';
preg_match_all($test, $string, $res);
$result[] = $nr;
$nrPart = substr($nr, 0, -1);
$firstPart = substr($nr, -1);
if (isset($res[1]))
{
foreach ($res[1] as &$value)
{
if ($firstPart !== false)
{
for ($i=$firstPart+1; $i<=$value; $i++)
{
$nr = $nrPart . $i;
$result[] = $nr;
}
$firstPart = false;
}
else
{
$nr = $nrPart . $value;
$result[] = $nr;
$firstPart = $value;
}
}
}
var_dump($result);
}
?>
0605052
0605053
0605054
0605055
0605057
0605058