J'essaye de capturer le "Some Company Name" à partir de la chaîne ci-dessous
(\@\@VALUE=)(\s)([^@]*)
Mais sans les espaces de fin avant le @@ final.
Je suis recevant ces données comme un tube, j'essaie donc d'utiliser un remplacement regex en Perl pour remplacer cette partie, donc le résultat final ressemblerait à:
"Some Company Name "
Je peux faire correspondre le début espace avant le nom de l'entreprise, mais ma correspondance pour le nom de l'entreprise est toujours:
@@VALUE=Some Company Name@@
En utilisant actuellement cette expression régulière:
@@VALUE= Some Company Name @@
Supprimer l'espace blanc de fin serait facile sans le @@ à la fin.
3 Réponses :
Si vous essayez de supprimer tous les espaces avant le @@
final, c'est juste
s/\s+\@\@$/\@\@/;
Je ne sais pas pourquoi vous devez faire correspondre autre chose .
ou utilisez le mode paresseux de regex perl
$s = '@@VALUE= Some Company Name @@' $s =~ s/@@VALUE=\s*(.+?)\s*@@\s*$/$1/ print $s
\ @ \ @ CLIENT = \ s * (. +?) \ s * \ @ \ @
Pourquoi votre expression régulière contient-elle
"@@ CUSTOMER ="
, alors que vos exemples d'entrées contiennent"@@ VALUE =
? Veuillez modifier pour clarifier.@Matthew Cela semble avoir des performances terribles s'il y avait une longue chaîne sans
@@
à la fin.@Matthew - cela a parfaitement fonctionné. Je prenais complètement la mauvaise approche.
@Matthew J'ai testé votre expression régulière avec la chaîne
'@@ CUSTOMER = hello? ». ('' x 50000). "\ nX \ @ \ @"
. Il a fallu plusieurs secondes pour terminer (et échouer), consommant 100% de CPU. C'est assez mauvais.@melpomene merci pour la perspicacité, j'utilise très rarement regex pour tout ce qui est essentiel aux performances personnellement, mais il est bon de connaître ses limites. Bien sûr, si OP a un tel scénario, il serait souhaitable de choisir une autre solution.
@Matthew Ce n'est pas une limitation inhérente aux expressions rationnelles. Utilisez simplement un schéma non stupide ^ W moins horrible.
Montre-moi où la regex t'a touché