Разбейте строку на части, возвращая все символы - PullRequest
2 голосов
/ 27 июня 2011

Я хочу разбить строку в соответствии со следующими правилами:

  1. все последовательные буквенно-цифровые символы плюс точка (.) должны рассматриваться как одна часть
  2. все другие последовательные символы должны рассматриваться как одна часть
  3. последовательные комбинации 1 и 2 должны рассматриваться как разные части
  4. пробелы не возвращаются

Например, эта строка:

Method(hierarchy.of.properties) = ?

Должен вернуть этот массив:

Array
(
    [0] => Method
    [1] => (
    [2] => hierarchy.of.properties
    [3] => )
    [4] => =
    [5] => ?
)

Мне не удалось с preg_split(), поскольку AFAIK не может рассматривать шаблон как элемент длябудут возвращены.

Любая идея для простой способ сделать это?

Ответы [ 2 ]

3 голосов
/ 27 июня 2011

Вы, вероятно, должны использовать preg_match_all вместо preg_split.

preg_match_all('/[\w|\.]+|[^\w\s]+/', $string, $matches);
print_r($matches);

Выход:

Array
(
    [0] => Array
        (
            [0] => Method
            [1] => (
            [2] => hierarchy.of.properties
            [3] => )
            [4] => =
            [5] => ?
        )

)
0 голосов
/ 27 июня 2011

Это должно делать то, что вы хотите:

$matches = array();
$string = "Method(hierarchy.of.properties) = ?";
foreach(preg_split('/(12|[^a-zA-Z0-9.])/', $string, 0, PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY) as $match) {
    if (trim($match) != '')
        $matches[] = $match;
}

Я использовал цикл для удаления всех совпадений с пробелами, поскольку, насколько я знаю, в preg_split () эта функция не предусмотрена для вас.

...