preg_split без замены? - PullRequest
       4

preg_split без замены?

0 голосов
/ 22 февраля 2012

Попытка разбить строку, но я не хочу "удалить" то, что я ищу ...

Строка выглядит так:

MDVB, 94010,(555) 555-5555, KHII, 94015, (555) 555-5555, POONHY, 94010, (555) 555-5555,

Я хочу разбить строку после номера телефона, но я неЯ не хочу удалять число ...

Прямо сейчас у меня есть это:

preg_split("/\(?  (\d{3})?  \)?  (?(1)  [\-\s] ) \d{3}-\d{4}/x", $string)

Но это выводит:

Array
(
    [0] => MDVB, 94010, 
    [1] => KHII, 94015, 
    [2] => POONHY, 94010, 
)

Я думал, что preg_split была вещьиспользовать ... Есть ли что-то еще, что я должен использовать?

Ответы [ 4 ]

1 голос
/ 22 февраля 2012

Вы должны использовать preg_match_all () для извлечения частей вашей строки.

<?php
$string = "MDVB, 94010, (555) 555-5555, KHII, 94015, (555) 555-5555, POONHY, 94010, (555) 555-5555,";

$res = preg_match_all("/([A-Z]+,\s+\d+,\s+\(\d{3}\) \d{3}-\d{4})/",$string,$matches);
print_r($matches);
?>

Выходы:

Array
(
    [0] => Array
        (
            [0] => MDVB, 94010, (555) 555-5555
            [1] => KHII, 94015, (555) 555-5555
            [2] => POONHY, 94010, (555) 555-5555
        )

    [1] => Array
        (
            [0] => MDVB, 94010, (555) 555-5555
            [1] => KHII, 94015, (555) 555-5555
            [2] => POONHY, 94010, (555) 555-5555
        )

)
0 голосов
/ 22 февраля 2012
$string = "MDVB, 94010, (555) 555-5555, KHII, 94015, (555) 555-5555, POONHY, 94010, (555) 555-5555,";
preg_match_all("/[A-Za-z]+, \d+, \(\d{3}\) \d{3}-\d{4}/", $string, $matches, PREG_SET_ORDER);

результаты:

var_dump($matches);

array (
  0 => 
  array (
    0 => 'MDVB, 94010, (555) 555-5555',
  ),
  1 => 
  array (
    0 => 'KHII, 94015, (555) 555-5555',
  ),
  2 => 
  array (
    0 => 'POONHY, 94010, (555) 555-5555',
  ),
)
0 голосов
/ 22 февраля 2012

Вам лучше использовать preg_match_all вот так:

preg_match_all("/(.*?(?:\(? (?:\d{3})? \)? [\-\s] )? \d{3}-\d{4})[^,]*(?:,|$)\s*/x",
               $string, $arr );
print_r($arr[1]);

ВЫВОД:

Array
(
    [0] => MDVB, 94010, (555) 555-5555
    [1] => KHII, 94015, (555) 555-5555
    [2] => POONHY, 94010, (555) 555-5555
)
0 голосов
/ 22 февраля 2012

Вы можете использовать опцию PREG_SPLIT_DELIM_CAPTURE, которая приведет к тому, что выражение в скобках в шаблоне разделителя будет также захвачено и возвращено.

$parts = preg_split("/\(?  (\d{3})?  \)?  (?(1)  [\-\s] ) \d{3}-\d{4}/x",
                    $string,
                    null,
                    PREG_SPLIT_DELIM_CAPTURE);

Результирующий массив:

array(7) {
  [0]=>
  string(13) "MDVB, 94010, "
  [1]=>
  string(3) "555"
  [2]=>
  string(15) ", KHII, 94015, "
  [3]=>
  string(3) "555"
  [4]=>
  string(17) ", POONHY, 94010, "
  [5]=>
  string(3) "555"
  [6]=>
  string(1) ","
}

Я считаю, что это поведение, которое вы искали.

...