問題タブ [lpeg]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
139 参照

lua - ハイフンが連続していない文字列にマッチするLPegパターン

文字列に一致するLPegパターンを作成しようとしています:

  • 手紙で始める
  • それ以降は英数字を含む
  • 2 つ以上の連続するハイフンを含まない (例: disallows test--string)

参考までに、正規表現[a-zA-Z](-?[a-zA-Z0-9])*は探しているものと一致します。

参考までに、私が作業しているコードは次のとおりです。

ただし、非常にイライラすることに、次の出力が得られます。

コードが何を出力したとしても、t-t--tt--t-t、およびt--tは一致しないはずです。

0 投票する
2 に答える
288 参照

regex - Lua 5.1 で反復可能な文字列を「単語全体」として一致させる

私の環境:

  • ルア5.1
  • ネイティブ コンポーネント (C .so/.dll など) を含むライブラリは絶対に使用できません。
  • 任意の純粋な Lua 5.1 コードを実行できosますが、ネイティブ ファイルシステム、シェル コマンドなどへのアクセスを許可するいくつかの他のパッケージにはアクセスできないため、すべての機能を Lua 自体 (のみ) に実装する必要があります。
  • 私はすでにLuLpegを取り込むことができました。おそらく、他の純粋な Lua ライブラリを取り込むことができます。

true入力文字列が文字と数字の任意のシーケンスに1 回以上繰り返される単語全体として一致し、一致する部分文字列全体の先頭または末尾に句読点がある場合に返す関数を作成する必要があります。PCRE の単語境界と同じ意味で「単語全体」を使用します\b

reこのアイデアを実証するために、LuLpegのモジュールを使用した誤った試みを次に示します。否定的な先読みでは機能するようですが、否定的な後ろ向きでは機能しないようです:

文字列の例と期待される戻り値を次に示します (引用符は、文字列のリテラル部分ではなく、Lua インタープリターに入力されたかのように構文的です。これは、末尾/先頭のスペースを明確にするために行われます)。

  • 入力: " one !tvtvtv! two"単語: tv戻り値: true
  • 入力: "I'd"単語: d戻り値: false
  • 入力: "tv"単語: tv戻り値: true
  • 入力: " tvtv! "単語: tv戻り値: true
  • 入力: " epon "単語: nope戻り値: false
  • 入力: " eponnope "単語: nope戻り値: false
  • 入力: "atv"単語: tv戻り値: false

完全な PCRE 正規表現ライブラリがあれば、これをすぐに実行できますが、C にリンクできないため実行できません。また、PCRE などの純粋な Lua 実装も見つかりませんでした。

LPEG が (LPEG を直接またはそのreモジュールを介して) 柔軟に使用して、私がやりたいことを実行できるかどうかはわかりませんが、組み込みの Lua 関数では、私がやりたいことを実行できないことは確かです。文字の繰り返しシーケンスを処理します。Lua の組み込み関数など(tv)+では動作しません。string:match

これを行う方法を見つけようと精査してきた興味深いリソースは役に立ちませんでした: