2

次のルールに従って文字列を分割したい:

  1. 連続するすべての英数字とドット(.)は1つの部分として扱う必要があります
  2. 他のすべての連続する文字は、1つの部分として扱われる必要があります
  3. との連続した組み合わせは12異なる部分として扱われる必要があります
  4. 空白を返す必要はありません

たとえば、次の文字列:

Method(hierarchy.of.properties) = ?

この配列を返す必要があります:

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

preg_split()AFAIKはパターンを返される要素として扱うことができないため、失敗しました。

これを行う簡単な方法のアイデアはありますか?

4

2 に答える 2

3

おそらく、preg_splitよりもpreg_match_allを使用する必要があります。

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

出力:

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

)
于 2011-06-27T12:18:11.150 に答える
0

これはあなたが望むことをするはずです:

$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;
}

I used a loop to remove all whitespace matches, since as far as I know there isn't a feature in preg_split() to that for you.

于 2011-06-27T12:18:37.943 に答える