Je veux substituer tout l'espace blanc qui précède la classe [A-Za-z0-9_]
, avec $
.Substitution regex
$string = "STRING sDir = sDrive";
$string =~ s/\s(?=[A-Za-z0-9_])/ \$/;
Il correspond à une seule fois et produit:
STRING $sDir = sDrive;
Je veux substituer tout l'espace blanc qui précède la classe [A-Za-z0-9_]
, avec $
.Substitution regex
$string = "STRING sDir = sDrive";
$string =~ s/\s(?=[A-Za-z0-9_])/ \$/;
Il correspond à une seule fois et produit:
STRING $sDir = sDrive;
Vous pouvez utiliser le drapeau g
pour votre regex:
$string = "STRING sDir = sDrive";
$string =~ s/\s(?=[A-Za-z0-9_])/ \$/g;
de sorte que le s///
fonctionnera pour chaque match pour votre modèle. Par défaut, le comportement de Perl consiste à effectuer la substitution une fois.
L'indicateur g
lui indique d'effectuer la substitution pour chaque occurrence.
Cela remplacera les tabulations, les retours à la ligne et les autres espaces avec un 'espace' aussi, alors soyez prudent. Ou remplacez simplement l'expression régulière par 's/(\ s) (? = [A-Za-z0-9 _])/$ 1 \ $/g'. Aussi, vous pouvez essayer 's/(? <= \ S) (? = [A-Za-z0-9 _])/\ $/g'. Les deux ne sont pas testés, mais le premier devrait fonctionner à coup sûr. – manixrock
droite, je me concentrais sur la chose de répétition. – benzebuth
Merci. Cela fonctionne très bien. – Dorian06
Pour correspondre plusieurs fois, utilisez le drapeau/g:
$string = "STRING sDir = sDrive";
$string =~ s/\s(?=[A-Za-z0-9_])/ \$/g;
si je pense que vous voulez dire ce que vous entendez:
s/\s+\b/ \$/g;
cela supprime tous les espaces avant (si ' a'
->' $a'
) et \ b est une affirmation de l'un ou (?=(?<=\W)\w)
(?=(<=\w)\W_
; \ s est toujours \W
, et [a-zA-Z0-9_]
correspond à la définition commune de \w
, il correspond donc à (?=[...])
.
(bien sûr, si vous avez affaire à des jeux de caractères dans lequel \w
ne sont pas les mêmes que [a-zA-Z0-9]
, vous devrez remplacer \b
pour l'affirmation.)
Vous pouvez utiliser '\ W' au lieu de '[A-Za-z0-9_]'. –
@eugene Non, vous ne pouvez pas utiliser '\ w' comme synonyme de' [A-Za-z0-9_] '. Si vous voulez dire '\ w 'avec toutes ses implications, alors utilisez' \ w'. Si vous voulez dire [A-Za-z0-9_] ', utilisez [A-Za-z0-9_]'. –
vous pouvez si vous savez que vous avez affaire à des ascii, cependant. – muhmuhten