Извлечение части строки, которая соответствует регулярному выражению (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 answers
Вы просите только один числовой символ, за которым следует пробел, который не выполняется, если их два.
Должно быть, вместо этого
preg_match('/ ([V|L|M][0-9]{1,2})? /',$str,$coincidencias,PREG_OFFSET_CAPTURE);
Принять либо одну или две цифры. Я также обернул его в круглые скобки, чтобы второй элемент массива был захваченной группой без пробелов.