0

関数呼び出しである文字列があります。それを解析してパラメータを取得したい:

"add_location('http://abc.com/page/1/','This is the title, it is long',39.677765,-45.4343,34454,'http://abc.com/images/image_1.jpg')"

合計 6 つのパラメーターがあり、URL、整数、小数が混在しています。使用する分割方法の正規表現がわかりません。助けてください!これは私が思いついたものです - これは間違っています。

/('(.*\/[0-9]*)',)|([0-9]*,)/
4

3 に答える 3

3

文字列をCSVのように扱うと、うまくいく可能性があります。

require 'csv'
str = "add_location('http://abc.com/page/1/','This is the title, it is long',39.677765,-45.4343,34454,'http://abc.com/images/image_1.jpg')"
p CSV.parse(str[13..-2], :quote_char => "'").first
# => ["http://abc.com/page/1/", "This is the title, it is long", "39.677765", "-45.4343", "34454", "http://abc.com/images/image_1.jpg"]
于 2013-03-13T17:52:23.370 に答える
2

あなたの例のように、すべての非数値パラメータが一重引用符で囲まれていると仮定します

string.scan( /'.+?'|[-0-9.]+/ )
于 2013-03-13T17:18:33.253 に答える
0

この複雑なものを正規表現で解析したくはありません。長期的にはうまくいきません。この 1 つの文字列を解析したいだけなのか、それとも正確な内容が異なるこの形式の文字列がたくさんあるのか、私にはわかりません。最終目標についてもう少し情報を提供すると、より詳細なヘルプが得られる場合があります。

一般的なケースでこれほど複雑なものを解析するには、文字列の適切なトークン化 (つまり字句解析) を実行する必要があります。Ruby で過去に、Citrus でこれを行う良い経験がありました。あなたがやろうとしているような複雑なトークン/言語を解析するための素晴らしい宝石です。詳細については、次を参照してください。

https://github.com/mjijackson/citrus

于 2013-03-13T17:11:36.527 に答える