2017-01-03 11 views
2

RegexBuddyタブの[デバッグ]は、正規表現がどのように実行されるかを示します。しかし、そのステップはどういう意味ですか?あらゆるステップの後ろにはどのような操作がありますか?RegexBuddyの「ステップ」とは何ですか?

+0

この質問は、オフトピックです、それは*一般的なコンピューティング・ハードウェアとソフトウェア*についてですので。 –

+0

それはあなたの考えに比べて、対応するエンジンがどのように機能するかを発見するツールです。 – revo

+2

あなたは 'within' RegexBuddyにプライベートフォーラムがあります。あなたがこの質問をそこに尋ねると、1月の著者が返信する可能性が高いと思いますか?また、[これは素晴らしい正規表現のチュートリアルです](http://www.rexegg.com/regexbuddy-tutorial.html)[デバッグ]セクションへのダイレクトリンクのビットを下にスクロールします。 – zx81

答えて

2

基本的にステップ数は入力の現在の位置が変更された回数で、パフォーマンスの指標として非常に優れています。

「現在位置」に任意の文字または(全体の入力の前と後を含む)間の文字であってもよいです。

簡略化すると、正規表現エンジンは、入力に沿って現在の位置を移動し、正規表現がその位置で一致するかどうかを評価することによって入力を処理します。彼らはまた、マッチが最大である正規表現内の位置を追跡します。

私はこの答えを正規表現のチュートリアルにしたくないのですが、正規表現エンジンは常にマッチングしながら可能な限り多くの入力を消費します。簡単な例を挙げれば、入力が"12345"と正規表現.*1.*の場合、正規表現エンジンはまず、入力の最後にある位置を残してすべての入力を消費し、1と一致しない場合は、バックトラックと一致するのは "uncomsuming"一度に1文字ずつ、1が見つかるまで続けてください。これは最初の.*を処理するために9ステップだけかかることがわかります。

これに対して、正規表現が[^1]*1.*の場合、正規表現は"1"と1ステップで一致します。

+0

ありがとう!しかし、この「入力の現在の位置が何回変更されたか」の詳細をいくつか提供することはできますか? –

+0

@ ConstantinSmolyanin私は答えを更新しましたが、http://www.regular-expressions.info/への訪問はおそらく順調です。 – Bohemian

+0

@SeinopSysもしあなたがregexbuddyを持っていれば、 "Debug Everywhere"を試してみてください。バックトラックしなければならない時はあなたの目標に応じて、一致するかどうかを確認することができます。 –

1

RegexBuddyのデバッガでは、正規表現エンジンが何かにマッチするか、何かにマッチすることができません。文字にマッチするステップは、それまでのステップより1文字多い通常の正規表現でマッチしたすべての文字で示されます。単語の境界のような位置に一致するステップは、今までに一致した文字と "ok"で示されます。何かに合致しなかったステップは、今までにマッチした文字と「バックトラック」によって示されます。

デバッガで一致する文字をクリックすると、RegexBuddyはその文字に一致する正規表現内のトークンを選択し、そのトークンと一致するデバッガ内のすべての文字を強調表示します。 "ok"または "backtrack"インジケータをクリックすると、RegexBuddyは正規表現内で一致した、または一致しなかったトークンを選択します。

キーボードでカーソルを移動すると、クリックするのと同じ効果があります。キーボードのEndキーを押すと、カーソルがステップの最後に移動します。次に矢印を上下に押すと、そのステップの最後にカーソルを置いたままカーソルが前または次のステップに移動します。このようにカーソルを動かすことで、正規表現エンジンが正規表現をどのように辿るか、どの文字がマッチして途中でバックトラックするかを簡単に追うことができます。

詳細については、RegexBuddyのヘルプファイルでこれらの2つのページを参照してください。 https://www.regexbuddy.com/manual.html#debug https://www.regexbuddy.com/manual.html#benchmark

関連する問題