2017-02-02 9 views
4

regexpを使っていくつかの文字列をトークン化する方法に関する質問がたくさんあります。正規表現パターンITSELFをどのようにトークン化するのですか?

しかし、正規表現のパターン自体をトークン化するには、私はその件名にいくつかの投稿があると確信していますが、見つけられません。

例:

^\w$     -> ['^', '\w', '&'] 
[3-7]*     -> ['[3-7]*'] 
\w+\s\w+    -> ['\w+', '\s', '\w+'] 
(xyz)*\s[a-zA-Z]+[0-9]? -> ['(xyz)*','\s','[a-zA-Z]+','[0-9]?'] 

私は、この作品がいくつかregexp関数が呼び出されたボンネットの下にpythonで行われていると仮定しています。

+2

正規表現は、有限状態機械の略語と考えることができます。http://stackoverflow.com/questions/525004/short-example-of-regular-expression-converted-to-state-machine –

+0

問題は '[-z]と' [az] 'のような構造です - メタコードは、その位置によって、その意味を変えます。他のいくつかのもの: '[*] *'と '[[]'。私は厳密な左から右への解析だけがそうする唯一の方法だと思う。 – usr2564301

+0

BTW Pythonは[boost](http://www.boost.org/)を使っています。 – usr2564301

答えて

0

開始場所:PyPy projectには(ほとんどが)PythonのPythonの実装があります。ソース配信のre.pysre-compile.c:_compile()を呼び出して作業を行います。あなたは、あなたが望む出力形式を提供するためにそれをハックすることができるかもしれません。

編集また、JavascriptのXRegExp libraryは、拡張構文で正規表現を解析し、標準の構文にそれらをレンダリングします。 parser routineがお手伝いします。