2011-02-09 2 views

ответ

4

Если вы действительно хотите использовать регулярное выражение, которое вы можете использовать:

$string = "540x360 [PAR 1:1 DAR 3:2]"; 
$matches = array(); 
preg_match('/^(\d+x\d+)/i', $string, &$matches); 
echo $matches[0]; 
+1

Nice. Это особенно полезно, если разрешение не находится в начале или содержит пробелы: «800 x 600» плохо взорвется, но регулярное выражение может быть легко адаптировано для его поддержки. Я бы, вероятно, написал его как '/ (\ d +) \ s * x \ s * (\ d +)/i', чтобы зафиксировать оба числа. Кроме того, добро пожаловать в переполнение стека. – Kobi

0
$res = str_replace(explode("[", "540x360 [PAR 1:1 DAR 3:2]"), " ", ""); 
    echo $res[0]; 
+2

будет возвращено пространство после результата: «540x360» – 000

+0

@Schattenbaum: только что отредактировано – oopbase

2

Нет необходимости CONVER строку в массив, который может быть очень раздражает ,

sscanf($str, "%s ", $resolution); 
// $resolution = 540x360 

Это может быть легко изменен, чтобы получить целые значения разрешения:

sscanf($str, "%dx%d ", $resolution_w, $resolution_h); 
// $resolution_w = 540 
// $resolution_h = 360 
1
<?php 

function extractResolution($fromString, $returnObject=false) 
{ 
    static $regex = '~(?P<horizontal>[\d]+?)x(?P<vertical>[\d]+?)\s(?P<ignorable_garbage>.+?)$~'; 

    $matches = array(); 
    $count = preg_match($regex, $fromString, $matches); 
    if ($count === 1) 
    { 
     /* 
     print_r($matches); 

     Array 
     (
      [0] => 540x360 [PAR 1:1 DAR 3:2] 
      [horizontal] => 540 
      [1] => 540 
      [vertical] => 360 
      [2] => 360 
      [ignorable_garbage] => [PAR 1:1 DAR 3:2] 
      [3] => [PAR 1:1 DAR 3:2] 
     ) 
     */ 

     $resolution = $matches['horizontal'] . 'x' . $matches['vertical']; 

     if ($returnObject) 
     { 
      $result = new stdClass(); 
      $result->horizontal = $matches['horizontal']; 
      $result->vertical = $matches['vertical']; 
      $result->resolution = $resolution; 
      return $result; 
     } 
     else 
     { 
      return $resolution; 
     } 
    } 
} 

$test = '540x360 [PAR 1:1 DAR 3:2] '; 

printf("Resolution: %s\n", var_export(extractResolution($test, true), true)); 
/* 
Resolution: stdClass::__set_state(array(
    'horizontal' => '540', 
    'vertical' => '360', 
    'resolution' => '540x360', 
)) 
*/ 

printf("Resolution: %s\n", var_export(extractResolution($test, false), true)); 
/* 
Resolution: '540x360' 
*/ 
Смежные вопросы