# PHP et expressions régulières : mettre des mots en surbillance

**URL:** <https://www.debian-fr.org/t/php-et-expressions-regulieres-mettre-des-mots-en-surbillance/83156>\
**Category:** Programmation\
**Tags:** php\
**Created:** [Novembre 1, 2020, 2:47 UTC](https://www.debian-fr.org/t/php-et-expressions-regulieres-mettre-des-mots-en-surbillance/83156 "2020-11-01T14:47:56Z")\
**Posts on this page:** 5\
**Page:** 1

<div class="post-metadata">

**Author:** ![cdpointpoint](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/c/cdc98d/32.png) [@cdpointpoint](https://www.debian-fr.org/u/cdpointpoint)\
**Post date:** [Novembre 1, 2020, 2:47 UTC](https://www.debian-fr.org/t/php-et-expressions-regulieres-mettre-des-mots-en-surbillance/83156/1 "2020-11-01T14:47:56Z")

</div>

Bonjour,  
J’écris un script PHP qui met des mots en surbrillance dans des chaînes de caractère.  
Je cherche à mettre le mot entier en surbrillance, pas une partie de mot, en utilisant **\b**.  
Ça fonctionne bien quand il n’y a pas de caractères accentués.  
Par exemple :

```php
$str1="Je ne bois pas de café car la caféine m'empêche de dormir. Je préfère une autre boisson.";
$str2=preg_replace('/\bbois\b/','<span style="background-color:yellow;">$0</span>',$str1);
echo '<p>'.$str2.'</p>';

```

Le mot _bois_ est bien mis en surbrillance quand il est seul, mais pas à l’intérieur de _boisson_.

Tout se gâte avec un caractère accentué en fin de mot :

```php
$str3=preg_replace('/\bcafé\b/','<span style="background-color:yellow;">$0</span>',$str1);
echo '<p>'.$str3.'</p>';

```

Là, _café_ est mis en surbrillance dans _caféine_, mais pas quand il est tout seul.  
(J’imagine que le problème se pose aussi quand le caractère accentué est en début de mot.)

Comment résoudre ce problème ?

---

<div class="post-metadata">

**Author:** ![sk4hrr](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/s/7bcc69/32.png) [@sk4hrr](https://www.debian-fr.org/u/sk4hrr)\
**Post date:** [Novembre 1, 2020, 3:12 UTC](https://www.debian-fr.org/t/php-et-expressions-regulieres-mettre-des-mots-en-surbillance/83156/2 "2020-11-01T15:12:57Z")

</div>

Bonjour,

Pour moi, tu utilises la mauvaise fonction, moi j’utiliserais [str\_replace()](https://www.php.net/manual/fr/function.str-replace.php) :

```php
$subject = "Je ne bois pas de café car la caféine m'empêche de dormir. Je préfère une autre boisson.";
$search = "café";
echo str_replace ($search , "<span class='surligner'>{$search}</span>", $subject);

```

---

<div class="post-metadata">

**Author:** ![cdpointpoint](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/c/cdc98d/32.png) [@cdpointpoint](https://www.debian-fr.org/u/cdpointpoint)\
**Post date:** [Novembre 1, 2020, 3:58 UTC](https://www.debian-fr.org/t/php-et-expressions-regulieres-mettre-des-mots-en-surbillance/83156/3 "2020-11-01T15:58:54Z")

</div>

Le problème avec str\_replace, c’est que le début de _ **café** ine_ sera aussi mis en surbrillance, ce que je souhaite éviter.  
C’est pour ça que j’ai utilisé preg\_replace, pour pouvoir mettre l’option **\b** (= limite de mot), mais cette option ne fonctionne pas avec les caractères accentués.

---

<div class="post-metadata">

**Author:** ![anon70622873](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/a/278dde/32.png) [@anon70622873](https://www.debian-fr.org/u/anon70622873)\
**Post date:** [Novembre 1, 2020, 5:39 UTC](https://www.debian-fr.org/t/php-et-expressions-regulieres-mettre-des-mots-en-surbillance/83156/4 "2020-11-01T17:39:00Z")

</div>

Bonjour,

Il faut indiquer que les chaînes doivent être traitées en UTF-8 avec _/u_ :

```php
$str3=preg_replace('/\bcafé\b/u','<span style="background-color:yellow;">$0</span>',$str1);

```

[https://www.php.net/manual/fr/reference.pcre.pattern.modifiers.php](https://www.php.net/manual/fr/reference.pcre.pattern.modifiers.php)

---

<div class="post-metadata">

**Author:** ![cdpointpoint](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/c/cdc98d/32.png) [@cdpointpoint](https://www.debian-fr.org/u/cdpointpoint)\
**Post date:** [Novembre 1, 2020, 7:53 UTC](https://www.debian-fr.org/t/php-et-expressions-regulieres-mettre-des-mots-en-surbillance/83156/5 "2020-11-01T19:53:18Z")

</div>

Super, ça marche nickel ! Merci !  
Ça va beaucoup m’aider, mieux que les horribles bricolages que j’utilisais jusqu’à présent.
