Извлечение части строки, которая соответствует регулярному выражению (RegEx)


Мне нужно извлечь substring из строки, которая соответствует ряду условий. Я почти получил это, но у меня есть ошибка в регулярном выражении, и я не в конечном итоге получить искомый результат.

я получаю строку с длинным именем платы, а также букву и номер версии. Например: "имя тариф V1 12M". Мне нужно остаться наедине с частью "V1".

всегда будет следовать шаблону: - Одна буква (в принципе заглавная, хотя я хотел бы принять оба), в моем случае это всегда будут буквы: V, L, M. - Всегда следует число, которое начинается с 0 и может достигать 2 цифр. Здесь у меня есть моя проблема, когда это цифра, она правильно извлекает substring, когда это 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 и $var5 он не извлекает значение (поскольку число, следующее за буквой, составляет 2 цифры), но должен. Как я могу исправить регулярное выражение? Или какое-либо решение для извлечения substring с этими функциями? Спасибо!

 1
Author: Norak, 2018-05-31

1 answers

Вы просите только один числовой символ, за которым следует пробел, который не выполняется, если их два.

Должно быть, вместо этого

preg_match('/ ([V|L|M][0-9]{1,2})? /',$str,$coincidencias,PREG_OFFSET_CAPTURE);

Принять либо одну или две цифры. Я также обернул его в круглые скобки, чтобы второй элемент массива был захваченной группой без пробелов.

 3
Author: ffflabs, 2018-05-31 12:13:53