2010-02-07 2 views
1

Je suis en train de diviser un document HTML dans sa tête et le corps:Pourquoi mon utilisation de la fonction de partage de Perl n'est-elle pas divisée?

my @contentsArray = split(/<\/head>/is, $fileContents, 1); 
if(scalar @contentsArray == 2){ 
    $bodyContents = $dbh->quote(trim($contentsArray[1])); 
    $headContents = $dbh->quote(trim($contentsArray[0]) . "</head>"); 
} 

est ce que j'ai. $fileContents contient le code HTML. Quand je cours ceci, il ne se divise pas. Quelqu'un sait pourquoi?

+4

L'utilisation d'une simple chaîne de texte pour analyser un document HTML est une mauvaise idée dans tout sauf les circonstances les plus artificielles. Vous devriez vraiment envisager d'utiliser un module comme HTML :: Parser. – gary

+0

Voter pour fermer comme "n'est plus pertinent". Voir http://stackoverflow.com/questions/2216274/why-does-my-use-of-perls-split-function-not-split/2216304#2216304 –

+0

@Sinan Ünür: c'est toujours une bonne question, cela semble moi d'être plus susceptible que la plupart d'aider un chercheur plus tard. – ysth

Répondre

1

désolé, compris. Pensé le 1 était combien de fois il trouverait l'expression ne limite pas les résultats. Changé à 2 et fonctionne.

+0

Ne postez pas de non-réponses. Mettez à jour votre question ou utilisez des commentaires à la place. –

+1

@Sinan Ünür: ressemble à une réponse à moi. J'ai seulement pris la peine de poster une réponse séparée parce que "limiter les résultats" pourrait être interprété à tort. – ysth

6

Le troisième paramètre est de diviser le nombre de résultats à produire, donc si vous voulez appliquer l'expression une seule fois, vous passeriez 2.

Notez que cela ne limite en fait le nombre de fois que le modèle est utilisé de diviser la chaîne (à un de moins que le nombre passé), ne limite pas seulement le nombre de résultats, donc ceci:

print join ":", split /,/, "a,b,c", 2; 

sorties:

a:b,c 

pas:

a:b 
Questions connexes