Maison > Questions et réponses > le corps du texte
J'essaie de couper les espaces Unicode comme ce caractère et j'ai pu le faire en utilisant cette solution. Le problème avec cette solution est qu'elle ne supprime pas les espaces Unicode entre les caractères normaux. Par exemple, celui-ci utilise un espace mince
$string = " test string "; echo preg_replace('/^[pZpC]+|[pZpC]+$/u', '', $string); // outputs: test string
Je connais un peu les expressions régulières, donc je ne sais pas quoi changer mon expression pour résoudre ce problème
P粉5579579702023-11-14 00:59:08
Pour supprimer tous les espaces Unicode avec des caractères de contrôle au début et à la fin d'une chaîne, et pour supprimer tous les espaces Unicode avec des caractères de contrôle, à l'exception des espaces normaux n'importe où dans une chaîne, vous pouvez utiliser
preg_replace('/^[\pZ\pC]+|[\pZ\pC]+$|(?! )[\pZ\pC]/u', '', $string) // Or, simply preg_replace('/^\s+|\s+$|[^\S ]/u', '', $string)
Voir Expressions régulières Démo #1 et Expressions régulières Démo #2.
Détails
^[pZpC]+
- un ou plusieurs espaces ou caractères de contrôle en début de chaîne |
- ou [pZpC]+$
- un ou plusieurs espaces ou caractères de contrôle |
- ou (?! )[pZpC]
- Un ou plusieurs espaces ou caractères de contrôle n'importe où dans la chaîne autre que les espaces normaux [^S ]
- 除常规空格 (x20
)Si vous devez également "exclure" les nouvelles lignes courantes, remplacez (?! )[pZpC]
替换为 (?![ rn])[ pZpC]
(由 @MonkeyZeus 建议) ,在第二个正则表达式中,这意味着您需要使用 [^S rn]
par (?![ rn])[ pZpC]
(Suggéré par @MonkeyZeus
[^S rn]
. Voir la démo PHP
: 🎜echo preg_replace('~^[\pZ\pC]+|[\pZ\pC]+$|(?! )[\pZ\pC]~u', '', 'abc def ghi '); // => abc defghi echo preg_replace('/^\s+|\s+$|[^\S ]/u', '', 'abc def ghi '); // => abc defghi
P粉4457509422023-11-14 00:22:00
Comment les espaces Unicode comme u{2009} peuvent causer des problèmes à différents endroits. Je remplacerais donc tous les espaces Unicode par des espaces réguliers, puis appliquerais trim().
$string = " test string and XY \t "; //\u{2009}\u{2009}\u{2009}test\u{2009}\u{2009}\u{2009}string\u{2009}and\x20XY\x20\x09\u{2009} $trimString = trim(preg_replace('/[\pZ\pC]/u', ' ', $string)); //test\x20\x20\x20string\x20and\x20XY
Remarque : La représentation des chaînes dans les commentaires est représentée par debug::writeUni($string, $trimString);. Implémenté à partir de cette classe.