1
votes

Comment faire correspondre la dernière occurrence d'un motif?

Étant donné que j'ai la chaîne suivante:

String 1 | string 2 | string 3

Je veux que mon expression régulière corresponde à la valeur après le dernier tube et espace, qui dans ce cas est "chaîne 3". p >

En ce moment, je suis en train d'utiliser ceci: / [^ |] + $ / i mais cela renvoie également le caractère espace après le tube.

https://regex101.com/r/stnW0D/1


1 commentaires

Utilisez s [/ \ s * ([^ |] *?) \ S * \ z /, 1] . Cependant, pourquoi ne pas utiliser strip ?


3 Réponses :


0
votes
'String 1 | string 2 | string 3'.scan(/[\|\s]?(\w+\s\d+)/).last
# ["string 3"]

1 commentaires

Excellente réponse Sebastian Palma. Si l'OP le souhaite sous forme de chaîne, il peut faire: 'String 1 | chaîne 2 | chaîne 3'.scan (/ \ | \ s (\ w + \ s \ d + \ z) /). map (&: first) .join ("','")



1
votes

Sans regex:

"String 1 | string 2 | string 3".split(" | ").last # => "string 3"


0 commentaires

0
votes
str = "string 1 | string 2 | string 3"

str[/[^ |][^|]*\z/]
  #=> "string 3"

0 commentaires