2010-06-28 5 views
2

Je suis en train d'ajouter une étiquette gras/strong les en-têtes de ligne du bloc chaîne de suivi/texte:têtes de ligne en gras aide RegEx nécessaire

Détermination de la longueur: les dimensions ci-dessus montrent ce centre-à-centre La longueur peut être obtenue par la longueur de liaison de connexion indiquée pour embouts sphériques mâles.

Matériau: aluminium.

Spéciaux: spéciaux sont disponibles à n'importe quel volume.

Normes: MCP offre

Mais je ne peux pas obtenir le regex d'inclure plusieurs mots. Voici mon résultat:

Longueur Détermination: les dimensions ci-dessus montrent ce centre à centre longueur peut être obtenue par la longueur de liaison de raccordement indiquées pour extrémités de tige sphérique mâle.

Matériau: aluminium.

Spéciaux: des spéciaux sont disponibles à n'importe quel volume.

Normes: MCP offre

Notez que le mot "Longueur" dans "Détermination de la longueur" est pas en gras/strong. Cela doit être inclus. Quelqu'un peut-il me donner un coup de main rapide?

Mon code:

$str = preg_replace_callback("/([^\s]+:)/i", 'makeStrong', $str); 

function makeStrong($matches) { 
    return "<strong>" . $matches[0] . "</strong>"; 
} 

Répondre

0

Qu'en est-ce:

$str = preg_replace_callback("/([ \w]+:)/", 'makeStrong', $str); 

Si le motif commence par ^, il ne correspond trouvé quelque chose au début de la chaîne entière (pour moi votre question sonne comme vous voulait traiter une chaîne multiligne en une seule passe).

Si \s est utilisé avec le \ w, il correspondra également aux sauts de ligne et les inclura dans le , comme vous l'avez probablement remarqué.

+0

BINGO! Tu l'as cloué et super petit. Bien joué. – gurun8

0

Essayez ceci:

<? 
$str = " 
Length Determination: the dimensions above show what center-to-center length can be achieved by the connecting linkage length shown for male spherical rod ends. 
Material: aluminum. 
Specials: specials are available at any volume. 
Standards: MCP offers 
"; 

$str = preg_replace_callback("/^([\w ]+:)/mi", 'makeStrong', $str); 

function makeStrong($matches) { 
    return "<strong>" . $matches[0] . "</strong>"; 
} 

print $str; 
?> 

Votre méthode échoue parce que [^\s] correspond à "pas des espaces" - qui signifie qu'il ne correspond pas à l'espace entre les mots.

EDIT fixe

+0

Testé. Ne fonctionne pas – gurun8

+0

Correction: voir modification. Oubliez le modificateur multiligne 'm' –

0

Votre [^\s] classe de caractères est tout correspondant qui est pas espaces blancs - ce qui signifie évidemment qu'il ne correspond pas à travers des mots qui ont des espaces entre eux. Essayez ceci:

$str = preg_replace_callback("/^([\w\s]+?:)/i", 'makeStrong', $str); 
+0

Cela fonctionne en combo avec mon original: preg_replace_callback ("/^ ([\ w \ s] +? :) | ([^ \ s] +:)/i ", ' makeStrong ', $ str); – gurun8