Я хочу получить подстроку из строки, прежде чем произойдет первое число - PullRequest
2 голосов
/ 12 октября 2011

Я хочу получить строки "MAU" и "120" из "MAU120"

и "MAUL" и "345" из "MAUL345".

"MAUW" и "23 "из" MAUW23 "

Пожалуйста, предложите последовательность кода, требуемую в PHP.

Ответы [ 3 ]

5 голосов
/ 12 октября 2011
$matches = array();

if ( preg_match('/^([A-Z]+)([0-9]+)$/i', 'MAUL345', $matches) ) {
    echo $matches[1]; // MAUL
    echo $matches[2]; // 345 
}

Если вам требуется MAU, вы можете сделать:

/^(MAU[A-Z]*)([0-9]+)$/i

Удаление модификатора i в конце сделает регулярное выражение регистрозависимым.

3 голосов
/ 12 октября 2011

Попробуйте это регулярное выражение:

/(\D*)(\d*)/

PHP код:

$matches = array();

var_dump( preg_match('/(\D*)(\d*)/', 'MAUL345', $matches) );
var_dump( $matches );
1 голос
/ 12 октября 2011

Взят буквально из ваших примеров:

<?php
$tests = array('MAU120', 'MAUL345', 'MAUW23', 'bob2', '?@#!123', 'In the MAUX123 middle.');

header('Content-type: text/plain');
foreach($tests as $test)
{
    preg_match('/(MAU[A-Z]?)(\d+)/', $test, $matches);
    $str = isset($matches[1]) ? $matches[1] : '';
    $num = isset($matches[2]) ? $matches[2] : '';
    printf("\$str = %s\n\$num = %d\n\n", $str, $num);
}
?>

Производит:

$test = MAU120
$str = MAU
$num = 120

$test = MAUL345
$str = MAUL
$num = 345

$test = MAUW23
$str = MAUW
$num = 23

$test = bob2
$str = 
$num = 0

$test = ?@#!123
$str = 
$num = 0

$test = In the MAUX123 middle.
$str = MAUX
$num = 123
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...