2010-11-30 8 views

Répondre

6
$string = "12312313sdfsdf24234"; 
preg_match_all('/([0-9]+|[a-zA-Z]+)/',$string,$matches); 
print_r($matches); 

cela pourrait fonctionner beaucoup mieux

+0

givng eteint Tableau ( [0] => array ( ) [1] => tableau ( ) [2] => tableau ( ) ) –

+0

modifie ma réponse correctement – Breezer

5
preg_match_all('/^(\d+)(\w+)$/', $str, $matches); 

var_dump($matches); 

$day = $matches[1][0]; 
$month = $matches[2][0]; 

Bien sûr, cela ne fonctionne que lorsque vos chaînes sont exactement comme décrit "abc123" (sans espace ajouté ou préfixé).

Si vous voulez obtenir tous les nombres et caractères, vous pouvez le faire avec une regex.

preg_match_all('/(\d)|(\w)/', $str, $matches); 

$numbers = implode($matches[1]); 
$letters = implode($matches[2]); 

var_dump($numbers, $letters); 

See it!

+0

Cela présume que la chaîne ne sera pas jan12 ou fg1dg34sdf. –

+0

Merci d'avoir arrondi ma réputation de downvoter anonyme. :) – alex

+0

Mon downvote était avant que vous avez édité votre réponse. J'ai défait mon vote. :) –

6
$numbers = preg_replace('/[^0-9]/', '', $str); 
$letters = preg_replace('/[^a-zA-Z]/', '', $str); 
+0

Il semble correct –

+0

[Vous n'avez pas besoin d'invoquer deux fois le moteur regex] (http://stackoverflow.com/questions/4311156/how-to-separate-letters-and-digits-from-a-string -in-php/4311202 # 4311202). – alex

+0

@alex, si c'est une question de vitesse, ce que j'ai posté est plus rapide dans mon test (100000 itérations).Je crois que c'est plus clair aussi. –

0

Essayez ceci:

$string="12jan"; 
$chars = ''; 
$nums = ''; 
for ($index=0;$index<strlen($string);$index++) { 
    if(isNumber($string[$index])) 
     $nums .= $string[$index]; 
    else  
     $chars .= $string[$index]; 
} 
echo "Chars: -$chars-<br>Nums: -$nums-"; 


function isNumber($c) { 
    return preg_match('/[0-9]/', $c); 
} 
+0

dans certaines versions c'est is_numeric() –

11

Vous pouvez utiliser preg_split pour diviser votre chaîne au point qui est précédé par chiffre et est suivi par des lettres comme:

$arr = preg_split('/(?<=[0-9])(?=[a-z]+)/i',$str); 

Code in Action

<?php 
$str = '12jan'; 
$arr = preg_split('/(?<=[0-9])(?=[a-z]+)/i',$str);                                                                
print_r($arr); 

Résultat:

Array 
(
    [0] => 12 
    [1] => jan 
) 
+0

votre code ne fonctionne pas s'il y a des espaces. '$ str = 12 Jan' comme ça –

+2

S'il y a un espace, ne serait-il pas plus facile d'utiliser exploser en utilisant l'espace lui-même comme un délimiteur? –

+0

@PrashantTapase ajoute simplement de l'espace dans le jeu de caractères '[a-z]': '[\ sa-z]' – sglessard

0

Après avoir travaillé plus avec PHPExcel, de telles opérations sont communes. #Tapase ,. Voici un preg_split qui vous donne ce que vous voulez avec de l'espace dans la chaîne.

<?php 
$str = "12 January"; 
$tempContents = preg_split("/[\s]+/", $str); 
foreach($tempContents as $temp){ 
echo '<br/>'.$temp; 
} 
?> 

Vous pouvez ajouter une virgule à côté du s pour séparées par des virgules. J'espère que cela aidera quelqu'un. Anton K.

1

Cela fonctionne pour moi selon mes besoins, vous pouvez modifier selon vôtre

function stringSeperator($string,$type_return){ 

    $numbers =array(); 
    $alpha = array(); 
    $array = str_split($string); 
    for($x = 0; $x< count($array); $x++){ 
     if(is_numeric($array[$x])) 
      array_push($numbers,$array[$x]); 
     else 
      array_push($alpha,$array[$x]); 
    }// end for   

    $alpha = implode($alpha); 
    $numbers = implode($numbers); 

    if($type_return == 'number')  
    return $numbers; 
    elseif($type_return == 'alpha') 
    return $alpha; 

}// end function 
0
<?php 
$data = "#c1"; 
$fin = ltrim($data,'#c'); 
echo $fin; 
?> 
+2

Bienvenue dans StackOverflow. Lorsque vous répondez à une question, veuillez expliquer votre code plutôt que d'afficher du code. – yakatz

+0

J'ai trouvé que c'était simple et clair, d'accord! si vous utilisez ltrim() vous pouvez supprimer des caractères de la gauche de votre chaîne par exemple je supprimais #c de la chaîne entière de sorte que vous seriez exclu avec 1 –

+0

si vous vous faites même ajouter la sortie il vous sera ajouté peut même ++ $ fin et obtenir la réponse en deux –

Questions connexes