我需要从满足多个条件的字符串中提取子字符串。我几乎成功了,但是我在正则表达式中有一个错误,我没有完成获得所需的结果。
我收到一个字符串,带有一个长名称的费率,以及一个字母和版本号。例如:“名称率 V1 12M”。我只需要保留“V1”部分。
它将始终遵循以下模式: - 一个字母(原则上是大写的,虽然我想同时接受),在我的情况下,它总是字母:V、L、M。 - 后面总是跟着一个从 0 开始的数字并且最多可以是 2 位数字。这里我有我的问题,当它是一个数字时,它会正确提取子字符串,当它是 2 个数字时它失败并且它不提取它,它找不到匹配项。
我给你留下了我到目前为止的一些例子,包括:
$var1 = "TARIFA 1.1 NOMBRE TARIFA V1 12M";
$var2 = "TARIFA LDVB8 NOMBRE V5 10M";
$var3 = "TARIFA HD76 V10 12M";
$var4 = "TARIFA NOMBRE4 L3 18M";
$var5 = "TARIFA NOMBRE5 L10 12M";
$var6 = "NO HAY COINCIDENCIA";
$var7 = "TARIFA NOMBRE7 M6 12M";
function extractV($str) {
if (preg_match('/ [V|L|M][0-9]? /',$str,$coincidencias,PREG_OFFSET_CAPTURE)) {
//Hay coincidencia
$valorBuscado = $coincidencias[0];
$version = $valorBuscado[0];
}
else
{
$version = "NO";
}
return $version;
}
$extraccion1 = extractV($var1);
echo "<br>Coincidencias1 = ". $extraccion1;
$extraccion2 = extractV($var2);
echo "<br>Coincidencias2 = ". $extraccion2;
$extraccion3 = extractV($var3);
echo "<br>Coincidencias3 = ". $extraccion3;
$extraccion4 = extractV($var4);
echo "<br>Coincidencias4 = ". $extraccion4;
$extraccion5 = extractV($var5);
echo "<br>Coincidencias5 = ". $extraccion5;
$extraccion6 = extractV($var6);
echo "<br>Coincidencias6 = ". $extraccion6;
$extraccion7 = extractV($var7);
echo "<br>Coincidencias7 = ". $extraccion7;
如您所见,在$var3
and$var5
中,它不会提取值(因为字母后面的数字是 2 位数字),但应该提取值。如何更正正则表达式?或者任何具有这些特征的子字符串提取解决方案?谢谢!
您只是要求一个数字字符后跟一个空格,如果有两个则不成立。
应该改为
接受一个或两个数字。我还将它包裹在括号中,以便数组的第二个元素是没有空格的捕获组。