Использование регулярного выражения для сопоставления каждого отдельного символа как его собственной группы? - PullRequest
0 голосов
/ 11 февраля 2009

В PHP я пытаюсь сопоставить каждый символ как отдельную группу. Что бы имитировать str_split(). Я попробовал:

$string = '123abc456def';
preg_match_all('/(.)*/', $string, $array);
// $array = array(2) { 
//   [0]=>  array(2) { 
//      [0]=>  string(12) "123abc456def"
//      [1]=>  string(0) "" } 
//   [1]=>  array(2) { [0]=>  string(1) "f" [1]=>  string(0) "" } } 

Я ожидал что-то вроде:

//$array = array(2) { 
//   [0]=> string(12) "123abc456def", 
//   [1]=> array(12) { 
//       [0]=>  string(1) "1", [1]=> string(1) "2"
//       ... 
//       [10]=> string(1) "e", [11]=> string(1) "f" } }

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

Ответы [ 4 ]

4 голосов
/ 11 февраля 2009

* за пределами символов означает, что вы хотите повторить группу захвата. (Это означает, что вы будете захватывать только последнюю итерацию.) Попробуйте глобальное совпадение любого отдельного символа, например:

preg_match_all('/(.)/', $subject, $result, PREG_PATTERN_ORDER);
$result = $result[0];
2 голосов
/ 11 февраля 2009

Попробуйте это:

preg_match_all('/./s', $str, $matches)

Это также соответствует символам разрыва строки.

0 голосов
/ 08 апреля 2013

Я не знаю, помогает ли это для этой станции, но вы можете получить доступ к буквам строки, например, к массиву .. так что

<?php
$a = "hede";
print $a[0] . "\n";
print $a[1] . "\n";
print $a[2] . "\n";
print $a[3] . "\n";
?>

выдаст

ч

е

д

е

0 голосов
/ 11 февраля 2009

Может быть, это то, что вы ищете:

preg_match_all ('/(.)+?/', $ string, $ Массива);

...