2012-02-17 8 views
3

正規表現を使用することもできますし、文字クラスと正規表現を最も基本的なASCII形式に変換できるライブラリもあります。正規表現を最も基本的なASCII形式に変換する

たとえば私は、次の変換をしたいのです:

\d -> [0-9] 
\w -> [A-Za-z0-9_] 
\s -> [ \t\r\n\v\f] 
\d{2} -> [0-9][0-9] 
\d{3,} -> [0-9][0-9][0-9]+ 
\d{,3} -> I dont even know how to show this... 
+2

'\ d {、3}'は '[0-9]?[0-9]?[0-9]?' – tripleee

+1

のように表現できますか? – beerbajay

+0

私は基本的なawkで使用できる正規表現にjava-regexを変換したいと思います。 – DanEEStar

答えて

1

RegexBuddyと呼ばれる市販の製品があります。この製品を使用すると、正規表現を構文に入力して、多くの一般的なシステムのいずれかのバージョンを生成できます。無料でそこに似たようなものがあるかもしれませんが、あなた自身で書くこともできます。

最も基本的な正規表現構文では、交替(OR)と閉鎖(STAR)の2つのものしか必要ありません。さて、グループ分け。 OK、3つのこと。他の一般的な演算子は、本当に、ただのショートカットです:

x+ = xx* 
x? = (|x) 
[xyz] = (x|y|z) 

など

のようなものは\dのように文字クラスにマップしてから交互に表示します。否定された文字クラスと.は非常に大きな変化にマップされます。 :)

ただし、ルックアラウンドなど翻訳されない機能がいくつかあります。機能なしで動作するものにそれらをマッピングすることは容易に自動化できません。その使用を動機付ける特定の状況に依存する。

1

まず、あなたがやりたいの変換を定義する必要があると思います。コメントに書かれているように、すべての高度な機能を簡単な演算子で書くことはできません。たとえば、ルックアラウム演算子には代用がありません。とにかくターゲット正規表現パーサによって制限されています。

次に、この変換リストを適用するだけで簡単に適用できます。おそらくそれらは正規表現自体として書くことができますが、正規表現を実際に解析する(評価しない)ためにPythonでスクリプトを書く方が簡単かもしれません。次に、要求された変換が適用された状態で書き戻すことができます。あまりにも複雑な機能を使用している場合は、あなたに吠えてください。

これはあまり難しくありませんが、非常に便利かどうかはわかりません。強力なregexpsが必要な場合は、より良いregexpエンジンを使用してください。例えば単純なAwkスクリプトの代わりに単純なPythonやPerlスクリプトを記述するのは簡単なはずです。

+0

'Lookaround演算子は何も一致しないかどうかをチェックするために、すべてのケースについてはわかりませんが、少なくとも単純なケースは理論的な正規表現に変換できます(代替、連結、閉包、グループ化)。正規表現を使ってテキストをマッチさせると変換できないと思います。 – nhahtdh

+0

@nhahtdh:いくつかの(あるいは多くの)ケースではおそらく正しいでしょうが、特に否定的な視線の場合は、常に可能だとは思いません。それが可能な場合、一般的な方法で必要な置換を定義することは自明ではないようです。 –

+0

'特に否定的なlookbehind'私はそれがどのように先読みより難しいかもしれないのだろうか? (もう一度、チェックのみ)。それが可能な場合、一般的な方法で必要とされる置換を定義することは自明ではないようだ。文字列に部分文字列 "abc"が含まれていないことを確認する正規表現は、ルックアライメントなしでは非常に複雑です。 – nhahtdh

関連する問題