Załóżmy, że mam ciąg taki jak „abc | xyz” i I „dlubię zamieniać go w „xyz | abc” używając tylko podstawienia wyrażeń regularnych. (W tym przykładzie mogą istnieć lepsze sposoby, ale jest to zastępstwo dla czegoś bardziej włochatego).
Poniższy kod nie działa zgodnie z oczekiwaniami:
x = "abc | xyz"
x = x.gsub(/^([^|s]*)s*|s*(S*)/, "2 | 1")
puts x
Czy to oczywiste, co robię źle? Dzięki!
Odpowiedzi:
4 dla odpowiedzi № 1Musisz uciec z ukośników odwrotnych w łańcuchu zastępczym. Na przykład,
x = "abc | xyz"
x = x.gsub(/^([^|s]*)s*|s*(S*)/, "\2 | \1")
puts x
Lub tylko
x = "abc | xyz"
x = x.gsub(/^([^|s]*)s*|s*(S*)/, "2 | 1")
puts x
a dla punktów bonusowych prostsze wyrażenie:
x = "abc | xyz"
x = x.gsub(/(.*) | (.*)/, "2 | 1")
puts x
4 dla odpowiedzi nr 2
I zawsze jest na to więcej niż jeden sposób ...
"abc | xyz".split(" | ").reverse.join(" | ")