RegEx для захвата определенного буквенно-цифрового шаблона в строке - PullRequest
2 голосов
/ 05 июня 2019

Я хочу, чтобы этот код возвращал модель Socket. Вместо AM3 + возвращает 6300 .

$string = "AMD FX X6 Six Core 6300, AM3+, 8MB L3 (BOX)Serie : FX,Socket : AM3+,Numar nuclee : 6,Frecventa : 3500 MHz,Frecventa Turbo : 4100 MHz";

preg_match('/[Socket]+[ : |:]+(?<socket>([A-Z]{2}+[0-9]{1}+[+]|[A-Z]{2}+[0-9]{1}|[A-Z]{3}+[ ]+[0-9]{4}|[0-9]{4}))/', $string, $array);

echo $array['socket'];

1 Ответ

0 голосов
/ 05 июня 2019

Здесь мы будем просто захватывать Socket с последующим пробелом, :, и мы будем захватывать то, что будет до первой запятой после этого, что является нашим желаемым выводом (.+?):

((Socket)\s+?:\s+?(.+?)),

Тест

$re = '/((Socket)\s+?:\s+?(.+?)),/m';
$str = '$string = "AMD FX X6 Six Core 6300, AM3+, 8MB L3 (BOX)Serie : FX,Socket : AM3+,Numar nuclee : 6,Frecventa : 3500 MHz,Frecventa Turbo : 4100 MHz";
';

preg_match($re, $str, $matches, PREG_OFFSET_CAPTURE, 0);

// Print the entire match result
var_dump($matches);

Выход

array(4) {
  [0]=>
  array(2) {
    [0]=>
    string(14) "Socket : AM3+,"
    [1]=>
    int(65)
  }
  [1]=>
  array(2) {
    [0]=>
    string(13) "Socket : AM3+"
    [1]=>
    int(65)
  }
  [2]=>
  array(2) {
    [0]=>
    string(6) "Socket"
    [1]=>
    int(65)
  }
  [3]=>
  array(2) {
    [0]=>
    string(4) "AM3+"
    [1]=>
    int(74)
  }
}
...