Извлечь определенные значения из строки - PullRequest
1 голос
/ 20 ноября 2011

У меня есть такая строка:

filter-sex=1,1_filter-size=2,3_filter-material=3,5

Как мне извлечь из нее только числовые пары ("1,1", "2,3" и "3,5") и поставитьих в массиве?

Я знаю, что могу использовать explode () несколько раз, но мне было интересно, есть ли простой способ использования регулярных выражений.

Я использую PHP.

Ответы [ 4 ]

2 голосов
/ 20 ноября 2011

Это:

preg_match_all('/(?<==)\d+,\d+/', $subject, $result, PREG_PATTERN_ORDER);
$result = $result[0];

должно получить все ваше число в массиве $ result.

Почему:

"
(?<=    # Assert that the regex below can be matched, with the match ending at this position (positive lookbehind)
   =       # Match the character “=” literally
)
\d      # Match a single digit 0..9
   +       # Between one and unlimited times, as many times as possible, giving back as needed (greedy)
,       # Match the character “,” literally
\d      # Match a single digit 0..9
   +       # Between one and unlimited times, as many times as possible, giving back as needed (greedy)
"
0 голосов
/ 20 ноября 2011
<?php
$str = "filter-sex=1,1_filter-size=2,3_filter-material=3,5";

preg_match_all("#[0-9]+,[0-9]+#", $str, $res);    
print_r($res);

?>
0 голосов
/ 20 ноября 2011

Вы можете попробовать это:

http://codepad.org/jtWs6DjM

Но он также возвращает строки до:

<?php
$string = "filter-sex=1,1_filter-size=2,3_filter-material=3,5";

$result = preg_split('/[a-z-_]+=([0-9],[0-9])/', $string, null, PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY);

print_r($result);

?>

Результат:

Array
(
    [0] => 1,1
    [1] => 2,3
    [2] => 3,5
)
0 голосов
/ 20 ноября 2011

Ну, это /\d,\d/ должно соответствовать всем парам однозначных чисел, используйте его с preg_match_all , чтобы получить массив строк num,num. Если вы ожидаете многозначные числа, используйте /\d+,\d+/.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...