试图弄清楚这一点,如果除了正则表达式之外还有另一种方法,我愿意接受。
需要采取类似于以下的模式:
- 一个在破折号之间有空格,另一个没有。
- 有时可能有 3 个周期,有时可能有 4 个。
在句点之间将始终是可能变化的数字,例如 1.111.1
- 1.1.1-50
- 1.1.1 - 50
- 1.1.1- 50
- 1.1.1 -50
以上应输出到:
- 字符串 1:1.1。
- 字符串2:1
- 字符串 3:50
我不知道如何只选择最后一个句点和破折号之间的数字,选择破折号后面的数字,也忽略任何空格。
更新:完整且有效的代码
利用 hakre 和 Niels 提供的信息并创建了以下代码:
不确定我的代码是否经过优化,但这基本上是我需要完成的。
<form action="" method="post">
<p>
<strong>Records Range:</strong> <input type="text" name="records_range" size="30" maxlength="22" />
<br />
<strong>Internal ID:</strong> <input type="text" name="internal_id" size="40" />
<select name="id_options">
<option value="default_internal_id">Default Internal ID</option>
<option value="new_internal_id">New Internal ID</option>
</select>
<br />
<input type="submit" value="Generate" />
</p>
</form>
<?php
$id_options = NULL;
if (isset($_POST['records_range'])) {
$id_options = $_POST['id_options'];
$internal_id = strip_tags(trim(($_POST['internal_id'])));
$records_range = strip_tags(trim($_POST['records_range']));
preg_match('~^((?:\d+\.){2,3})(\d+)\s?-\s?(\d+)$~', $records_range, $record_segements);
$range_prefix = $record_segements[1];
$range_start = $record_segements[2];
$range_end = $record_segements[3];
echo "<p><strong>Record Data Generated For:</strong> ".$range_prefix.$range_start." - ".$range_end."</p>";
}
switch ($id_options){
case 'default_internal_id':
echo "<textarea cols=\"65\" rows=\"10\">";
// start output
while($range_start <= $range_end){
if($range_start < $range_end){
echo "EUI-ZQ50-N-".$range_prefix.$range_start."\n";
}
else{
echo "EUI-ZQ50-N-".$range_prefix.$range_start;
}
$range_start++;
}
echo "</textarea>";
break;
case 'new_internal_id':
echo "<textarea cols=\"65\" rows=\"10\">";
// start output
while($range_start <= $range_end){
if($range_start < $range_end){
echo $internal_id." ".$records_prefix.$range_start"\n";
}
else{
echo $internal_id." ".$records_prefix.$range_start;
}
$range_start++;
}
echo "</textarea>";
break;
default:
echo "<h4>Example:</h4>";
echo "<p><strong>Records Range</strong>: 1.22.333.444-500 = 1.22.333.444 <strong>THROUGH</strong> 500</p>";
}
?>