7

文字列をパターンと一致させようとしていますが、まだ理解できていないことが 1 つあります。正規表現では、次のようにします。

Strings:
en
eng
engl
engli
englis
english

Pattern:
^en(g(l(i(s(h?)?)?)?)?)?$

すべての文字列を一致させたい。Lua パターン マッチングでは、これを機能させることができません。

次のような単純な例でもうまくいきません。

Strings:
fly
flying

Pattern:
^fly(ing)?$

誰もこれを行う方法を知っていますか?

4

2 に答える 2

9

?Lua の量指定子、*+およびを使用して、一致グループをオプションにする (または繰り返す) ことはできません-

pattern(%d+)?では、疑問符はその特別な意味を「失い」?、次のコード行を実行するとわかるように、単にリテラルと一致します。

text = "a?"
first_match = text:match("((%w+)?)")
print(first_match)

印刷されます:

a?

私の知る限り、Luaで最も近いのは次のパターンを使用することです:

^eng?l?i?s?h?$

"enh"これは (もちろん) 、"enls"、 ...などの文字列にも一致します。

于 2012-07-06T14:53:00.180 に答える
3

Lua では、括弧はキャプチャにのみ使用されます。それらは原子を作成しません。

必要なパターンに最も近いものは次のとおりです。

'^flyi?n?g?$'
'^en?g?l?i?s?h?$'

正規表現エンジンの全機能が必要な場合は、Lua で使用できる一般的なエンジンへのバインディングがあります。また、 PEGを作成するためのライブラリである LPeg もあります。これには、例として正規表現エンジンが付属しています (どれほど強力かはわかりません)。

于 2012-07-06T14:54:10.450 に答える