2017-01-17 2 views
3

Je dois extraire une lettre ou un nombre spécifique d'une chaîne.Comment extraire une seule lettre ou un seul numéro d'une chaîne?

<div id="craftysyntax_1" style="float: right;"><script type="text/javascript" src="https://livehelp.clipboards.com/livehelp_js.php?eo=0&amp;department=1&amp;serversession=1&amp;pingtimes=10&amp;dynamic=Y&amp;creditline=W"></script></div> 

De cette div avec id="craftysyntax_1" Je veux extraire seulement le nombre de cette craftysyntax_1, je suis en train d'exploser, mais ça ne marche pas pour moi ou peut-être que je fais quelque chose de mal.

Voici ce que j'ai essayé:

$myString = '<div id="craftysyntax_1" style="float: right;"><script type="text/javascript" src="https://livehelp.clipboards.com/livehelp_js.php?eo=0&amp;department=1&amp;serversession=1&amp;pingtimes=10&amp;dynamic=Y&amp;creditline=W"></script></div>'; 
      $strArray = explode('craftysyntax_', $myString, 1); 
      print_r($myString); 

Comment puis-je obtenir ce que je veux?

+0

un 'regEx' semblerait comme la solution idéale – RamRaider

Répondre

1

Vous pouvez utiliser un regEx pour atteindre votre objectif comme dans cet exemple

$myString = '<div id="craftysyntax_123" style="float: right;"><script type="text/javascript" src="https://livehelp.clipboards.com/livehelp_js.php?eo=0&amp;department=1&amp;serversession=1&amp;pingtimes=10&amp;dynamic=Y&amp;creditline=W"></script></div>'; 
$pttn = '@craftysyntax_(\d{1,})@'; 
preg_match($pttn, $myString, $matches); 

echo '<pre>',print_r($matches,1),'</pre>'; 

Affichera:

Array 
(
    [0] => craftysyntax_123 
    [1] => 123 
) 

donc, vous pouvez cibler l'entier en utilisant $matches[1]

1
preg_match("/craftysyntax_(.*)\\" /", $myString, $output_array); 
echo $output_array[1]; 

Bonne chance!

1

Je veux extraire juste le numéro 1 de ce craftysyntax_1

Utilisez la fonction preg_match:

$myString = '<div id="craftysyntax_1" style="float: right;"><script type="text/javascript" src="https://livehelp.clipboards.com/livehelp_js.php?eo=0&amp;department=1&amp;serversession=1&amp;pingtimes=10&amp;dynamic=Y&amp;creditline=W"></script></div>'; 

preg_match("/id=[\"']craftysyntax_(\d+)[\"']/", $myString, $matches); 
$craft_number = $matches[1]; 

print_r($craft_number); // 1 
0

Vous avez vraiment shouldn't use regex to try and parse HTML.

Une solution alternative, utiliser DOMDocument pour extraire l'ID que vous voulez:

$str = '<div id="craftysyntax_1" style="float: right;"><script type="text/javascript" src="https://livehelp.clipboards.com/livehelp_js.php?eo=0&amp;department=1&amp;serversession=1&amp;pingtimes=10&amp;dynamic=Y&amp;creditline=W"></script></div>'; 

$dom = new DOMDocument; 
$dom->loadHTML($str); 
$src = $dom->getElementsByTagName('div')->item(0); 
$attr = $src->attributes->getNamedItem('id')->value; 

Cela vous donnera la valeur craftysyntax_1. Maintenant, vous pouvez facilement saisir tout après la dernière underscore, si elle existe:

if (($pos = strrpos($attr, '_')) !== false) { 
    echo substr($attr, $pos + 1); 
} 
1

Essayez ceci en utilisant preg_match:

$myString = '<div id="craftysyntax_1" style="float: right;"><script type="text/javascript" src="https://livehelp.clipboards.com/livehelp_js.php?eo=0&amp;department=1&amp;serversession=1&amp;pingtimes=10&amp;dynamic=Y&amp;creditline=W"></script></div>'; 
preg_match("/id=[\"']craftysyntax_(\d+)[\"']/", $myString, $output); 
print_r($output); //Array ([0] => id="craftysyntax_1" [1] => 1) 
print_r($output[1]);//1