Luaのパターン(正規表現)の表記方法について質問です。


下記のような座標に対応するパターンの表記方法について教えて下さい。
16.0S, 17.3W
15.9S, 17.4W
16.2S, 17.5W
15.9S, 17.4W
(15.9s,17.3wから16.2s,17.5wまでの四角のエリア内から得られる座標です。)

Luaで作成されたゲーム内のプラグインで使用する、トリガー部分のパターンを書こうとしています。
http://www.lotrointerface.com/downloads/info609-1.01.html 
     得られた座標から、地名を表示したいと思っています。)

当初、正規表現の初心者向けの解説サイトを参考にして、
1(5.9|6.[0-2])S, 17.[3-5]W
と書いたのですが動かず。色々調べた所、lua では | が使えない事までは分かりました。

要領を得ない質問かと思いますが、よろしくお願いします。

回答の条件
  • 1人5回まで
  • 13歳以上
  • 登録:2012/04/04 11:40:54
  • 終了:2012/04/05 21:50:26

ベストアンサー

id:a-kuma3 No.1

a-kuma3回答回数4365ベストアンサー獲得回数18012012/04/04 12:05:46

ポイント100pt

色々調べた所、lua では | が使えない事までは分かりました。

string.find 、もしくは、string.match を使おうとしている、ということですよね?

http://www.rtpro.yamaha.co.jp/RT/docs/lua/tutorial/library.html#string.find
http://www.rtpro.yamaha.co.jp/RT/docs/lua/tutorial/library.html#string.match

文字列strの先頭から、パターンpatternに合致する部分を探します。


http://www.rtpro.yamaha.co.jp/RT/docs/lua/tutorial/library.html#pattern

パターンは、string.match関数などで文字列を検索するために使用されるものです。Lua独自のパターンと正規表現が利用できます。

正規表現は_RT_LUA_VERSIONが"1.03"以降のファームウェアで扱うことができます。
...
|の前後のパターンのいずれかに合致する文字列に合致します。

なんか、使えそうですけど。


思うに、パターンを正規表現ではなく、文字列で指定しているんじゃないでしょうか?

x = string.match("15.9S, 17.4W", /1(5\.9|6\.[0-2])S, 17\.[3-5]W/)

ピリオドだけ、¥でエスケープしてますが、質問に書いてある正規表現、ほぼそのままです。
ダブルクォートでくくるのではなく、スラッシュでくくると期待通りになるんじゃないかと思います。。


【追記】

私は、プラグイン(ゲームクライアント内で使用するアプリ)の利用者です。
トリガーの項目に登録する文字列を書こうとしています。

こちらこそ、ごめんなさい。
プログラムを作るわけじゃなくて、設定画面に入力したい、ってことだったんですね。

ソースを読んでみたんですけど、文字列を使う方(Lua 独自の正規表現)しかできないんですね。
Ver 1.04 だと、Main.lua の 1934行目の

	local captures=({string.match(string.lower(args.Message),string.lower(Alerts[tmpIndex][8]))});

で、判定しているようなのですけれど、以下のように書き換えれば、Lua 独自のではなく、普通の正規表現が使えるようになるはずです。

	local regexp=string.regexp(Alerts[tmpIndex][8], "i");
	local captures=({string.match(string.lower(args.Message), regexp)});

# 反則?

他1件のコメントを見る
id:a-kuma3

質問の書き方が悪くすみませんでした。

いえ、質問の内容をきちんと読んでない、ぼくが悪いです。
spiq さんの正規表現に対する理解は正しいと思います。
それをふまえて、回答に追記しました。

2012/04/04 15:38:08
id:chicken22

プラグインのソースまで見ていただき、ありがとうございます。
現状では出来ない事がわかり、大変すっきりしました

|を使わない文字列で対応しつつ、プラグインの作者さんにも要望を出してみます。
(ゲーム内の複数プレーヤー間の情報共有に使いたいので、公式に対応して頂けた方がありがたいため)

初心者の疑問に丁寧にご対応頂きありがとうございました。

2012/04/05 21:49:44

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません