2011-08-21 22 views
6

なぜこれがうまくいかず、それを回避する理由/方法を知る必要があるのは不思議です。私はいくつかの入力が問題であるかどうかを検出しようとしている、私はかなり確信してstring.matchは私が必要なものであるんだけど、:Lua string.matchは不規則な正規表現を使用していますか?

print(string.match("how much wood?", "(how|who|what|where|why|when).*\\?"))

はnilを返します。私は成功の前にワイルドカード(。)を使用していたので、文字列の一致を見つけるのにpretty sure Lua's string.match uses regular expressionsですが、おそらく私はすべての仕組みを理解できませんか? Luaは文字列関数に特殊な区切り文字を必要としますか?正規表現hereをテストしました。したがって、正規表現を使用すると上記のコードが"how much wood?"を返すようです。

あなたのいずれかが、私がやって何を意味するか、私が間違ってやっているものを私に教えて、または私はLuaのの文字列操作関数は、正規表現を利用する方法に関する包括的な情報を得ることができます良い参考に私を指すことができますか?

答えて

11

ルアは正規表現を使用していません。 Luaは同じように見えますが異なる入力と一致するPatternsを使います。

.*も入力の最後の?を消費するため、\\?で失敗します。疑問符は除外する必要があります。特殊文字は%でエスケープされます。

"how[^?]*%?" 

オムリバレルは言ったように、交替演算子はありません。おそらく、複数のパターンを使用する必要があります.1つは、文の先頭にある代替単語ごとに1つです。または、正規表現のような式をサポートするライブラリを使用することもできます。

+0

ああ、ありがとう。私はパターンが正規表現のように見えるので、私は本当に混乱していると思うが、少し変わってくる。 – Uronym

8

manualによれば、パターンは交替をサポートしていません。

ので"how.*"作品、"(how|what).*" doesntの間。

そしてkapepは.*によって飲み込まれる疑問符に関する権利です。

関連する質問:Lua pattern matching vs. regular expressionsがあります。