2

私は、(データベースに保存されている) 多数の文字列を一連の Java 正規表現ルールによって変換し、人間が判読できるようにするツールを使用しています。新しいルールを簡単に追加できるようにするために、提案された正規表現によってどの文字列が影響を受けるかを示す UI が必要です。

私は数少ない要件の 1 つが Ruby on Rails で行われている学校のプロジェクトを持っており、上記のニーズを満たすためにそれを使用することを検討しています。

提案された Java スタイルの正規表現を Ruby 正規表現に変換する既存のライブラリ/gem はありますか (影響を受ける文字列を見つけるコードを Ruby にすることができます)。

編集:私は自分自身をうまく説明していなかったと思います。特定のJava正規表現を同等のRuby正規表現に変換するgemを探しています(もちろん制限内)。ワークフローの例を次に示します。

  1. ユーザーが Java 正規表現を入力し、*[^~]Some.Regex[1-9]*
  2. Java 正規表現文字列が Rails サーバーに送信されます
  3. Rails サーバーは、この正規表現が適用されるデータベースから文字列のリストを返します。

*[^~]Some.Regex[1-9]*ステップ 3 を達成する方法を検討する中で、Java 正規表現を同等のRuby に変換するライブラリーがあるかどうか疑問に思いました/*[^~]Some.Regex[1-9]*/(これが実際に同等かどうかはわかりませんが、例として使用しているだけです)。

4

3 に答える 3

2

私の記憶が正しければ、Java 正規表現は基本的に文字列であり、メソッドに渡され、正規表現エンジンに渡されました。

Ruby の正規表現も同じです。Ruby には正規表現を作成するいくつかの方法があり、定義は異なりますが、すべて同じオブジェクトを返します。

/[^~]Some.Regex[1-9]*/             # => /[^~]Some.Regex[1-9]*/
%r[[^~]Some.Regex[1-9]*]           # => /[^~]Some.Regex[1-9]*/
Regexp.new('[^~]Some.Regex[1-9]*') # => /[^~]Some.Regex[1-9]*/

pattern = '[^~]Some.Regex[1-9]*'
/#{ pattern }/                     # => /[^~]Some.Regex[1-9]*/

これにより、ある程度の柔軟性が得られ、文字列を正規表現に置き換えたり、Regex.new.

Ruby には Java が持つすべてのフラグがあるわけではないので、それらに注意する必要があります。非キャプチャ グループ、先読み/後読み、およびアサーションがサポートされています。

(?:X) X、非キャプチャ グループとして
(?idmsux-idmsux) 何もしませんが、一致フラグ idmsux をオン - オフにします
(?idmsux-idmsux:X) X、指定されたフラグ idmsux on - off を持つ非キャプチャ グループとして
(?=X) X、ゼロ幅の正の先読みによる
(?!X) X、ゼロ幅の負の先読みによる
(?X) X、独立した非キャプチャ グループとして
于 2013-03-14T04:39:28.593 に答える
0

これをサポートするgemを作成しました。github ページには、サポートされている機能の詳細が記載されています。

于 2013-03-25T09:42:36.137 に答える
0

http://txt2re.com/をチェックしてください。

選択した選択に基づいて REGEX を生成できます。次に、REGEX を使用する言語を選択できます。これにより、Java と Ruby の式の書き方を比較できます。それは素晴らしいツールであり、所有者がそれを長く維持することを願っています!

ここに画像の説明を入力

于 2013-03-14T02:51:28.880 に答える