Разделение строки по группе [АЛЬФА] [ЦИФРА] [АЛЬФА] - PullRequest
4 голосов
/ 10 сентября 2011

Я пытаюсь удалить строку, сгруппированную по типу (только ALPHA или DIGIT), без каких-либо других символов.

Я работаю в PHP и хотел бы использовать REGEX.

Мне нужно преобразовать строку ввода, например " ES-3810 / 24MX ", в массив типа [ES] [3810] [24] [MX] и строку вводанапример " CISCO1538M " для массива, например [CISCO] [1538] [M] .

Последовательность входного файла может быть безразлично DIGITS или ALPHA.

Разделителями могут быть символы не-ALPHA и не-DIGIT, а также переход от последовательности DIGIT к последовательности APLHA и наоборот.

Извините за мой плохой английский ... надеюсь, мойОбъяснение выглядит ясным, однако.

Спасибо за вашу большую помощь.

С уважением.

Ответы [ 2 ]

3 голосов
/ 10 сентября 2011

Команда для сопоставления всех вхождений регулярного выражения: preg_match_all(), которая выводит многомерный массив результатов. Регулярное выражение очень простое ... любая цифра ([0-9]) один или несколько раз (+) или (|) любая буква ([A-z]) один или несколько раз (+). Обратите внимание на заглавные буквы A и строчные буквы z, включающие все заглавные и строчные буквы.

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

<textarea style="width:400px; height:400px;">
<?php

foreach( array(
        "ES-3810/24MX",
        "CISCO1538M",
        "123ABC-ThatsHowEasy"
    ) as $string ){

    // get all matches into an array
    preg_match_all("/[0-9]+|[[:upper:][:lower:]]+/",$string,$matches);

    // it is the 0th match that you are interested in...
    print_r( $matches[0] );

}

?>
</textarea>

Какие выходные данные в текстовой области:

Array
(
    [0] => ES
    [1] => 3810
    [2] => 24
    [3] => MX
)
Array
(
    [0] => CISCO
    [1] => 1538
    [2] => M
)
Array
(
    [0] => 123
    [1] => ABC
    [2] => ThatsHowEasy
)
1 голос
/ 10 сентября 2011
$str = "ES-3810/24MX35 123 TEST 34/TEST";
$str = preg_replace(array("#[^A-Z0-9]+#i","#\s+#","#([A-Z])([0-9])#i","#([0-9])([A-Z])#i"),array(" "," ","$1 $2","$1 $2"),$str);
echo $str;
$data = explode(" ",$str);
print_r($data);

Я не мог думать о более "чистом" способе.

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