問題タブ [lookahead]

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 投票する
3 に答える
1784 参照

regex - 最も内側の区切られたシーケンスのみに一致する正規表現

複数の文字で区切られたシーケンスを含む文字列があります:<<および>>最も内側のシーケンスのみを取得するには、正規表現が必要です。先読みを試しましたが、期待どおりに機能していないようです。

テスト文字列は次のとおりです。

戻るはずです:

3番目の結果からわかるように/<<[^>]+>>/、文字列には区切り文字の1文字が含まれている可能性があるため、使用することはできませんが、2行続けて使用することはできません。

私は試行錯誤から新鮮です。私には、これはそれほど複雑であってはならないようです。

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

parsing - 多くの先読みが必要なケースの解析

ほとんどの構文解析は、次の記号(字句解析用の文字、適切な構文解析用のトークン)のみを調べることで実行でき、残りのほとんどの場合は、その後の1つの記号のみを調べることで処理できます。

プログラミング言語や実際に使用されているデータ形式の場合、先読み(または同等にバックトラック)のシンボルをいくつかまたは無期限に多く必要とする実際的なケースはありますか?

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

java - 正規表現を使用して単語以外の文字に一致させますが、スマイリーフェイスには一致させません

=) や =] や :P などのスマイリー フェイスの場合を除いて、文字列から文字以外のすべての文字を削除する Java プログラムがあります。

反対を一致させるのは非常に簡単[a-zA-Z ]|=\)|=\]|:Pですが、この表現を否定する方法がわかりません。String.replaceAll() 関数を使用しているため、否定形式にする必要があります。

問題の一部は、笑顔の長さが通常 2 文字であり、一度に 1 文字しか一致しないという事実に起因する可能性があると思います。

興味深いことに、replaceAll("(?![Tt])[Oo]","")"to" という単語の中にさえ、文字 O が出現するたびに削除されます。これは私の replaceAll 関数が正規表現の先読みを理解していないということですか? エラーは発生しません...

結局使ってしまった

これは非常に面倒ですが、完全に機能します。The... quick! (brown) fox jump's over the[] lazy dog. :] =O ;XになるTHE QUICK BROWN FOX JUMPS OVER THE LAZY DOG :] =O ;X

編集:その修正を無視してください。以下の受け入れられた回答を参照してください。

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

java - LookAhead を使用した Lucene Tokenizer

LookAhead を使用して Lucene Tokenizer を実装するための正しい方向を教えてくれる人はいますか?

私は Snowball Stemmer を使用しており、都市名の語句を取得し、それらがステミングされないようにしたいと考えています。これにより、「Los」と「Los」の 2 つのトークンではなく、「Los Angeles」が 1 つのトークンとして設定されます。 「天使」。

また、どの都市名にも一致しないトークンを 1 つの単語として保持する必要があります。

何か案は?

ティア

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

perl - Perl 置換でネストされたルックアラウンドが正しく機能しないのはなぜですか?

ハイパーリンクを小文字に変換する Perl 置換があります。

ハッシュで始まるリンクを置換で無視するようにします。たとえば、パス<a href="FooBar/Foo.bar">Foo Bar</a>を小文字に変更しますが、遭遇した場合はスキップし<a href="#Bar">Bar</a>ます。

これらのリンクをスキップするように指示するために先読みをネストすることは、私にとっては正しく機能しません。これは私が書いたワンライナーです:

この置換でどこが間違っているのか、誰か教えてもらえますか? 正常に実行されますが、何もしません。

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

regex - php preg_replace 正規表現先読み

preg_replace を使用して、HTML サイドワイドのアンパサンドを置き換えようとしていますが、問題は、インライン javascript && または ?page=test&id=1 のような javascript url を壊すことです。

今、私はこのコードを持っています

左または右にスペースがある場合、アンパサンドを置き換えます。2 つのアンパサンドが連続している場合 (javascript の場合)、または html エンティティが続く場合は置き換えないでください。

しかし、ここではかなり不必要なロジックだと思います。また、test&test のような場合は、アンパサンドを置き換えません。

私は正規表現の専門家ではないので、これにはかなりの時間がかかりました。そのため、ここでもう一度助けを求めることにしました。

JavaScript スクリプト タグ内にない場合は、単にすべてのアンパサンドを置き換える方がよいでしょうか? 私はすでにそれを試しましたが、本当の成功はありません

それをアーカイブする方法を知っている人はいますか?ありがとうございました

0 投票する
5 に答える
5054 参照

regex - ネストされた正規表現の先読みと後読み

正規表現のネストされた「+」/「-」先読み/後読みに問題があります。

'*'で文字列を変更したいとしましょう。次の文字をエスケープする'%'としましょう。'\'(正規表現をSQLのようなコマンドに変えます^^)。

だから文字列

  • '*test*'に変更する必要があります'%test%'
  • '\\*test\\*'-> '\\%test\\%'、しかし
  • '\*test\*'そして'\\\*test\\\*'変わらないはずです。

私は試した:

上記の例の「*」に一致する正しい正規表現は何ですか?

このような視覚的な構造を持つ正規表現の違いと、これらが本質的に間違っている場合の(?<!\\(?=\\\\)*)\*違いは何ですか?(?=(?<!\\)(?=\\\\)*)\*

0 投票する
7 に答える
2105 参照

java - キャラクターの先読み

Javaで文字先読みメソッドを作成するにはどうすればよいですか? テキスト ファイル (TextFile.txt としましょう) があり、最初に 1 文字を読み取り、特殊文字 ({ = + ; など) の場合はそれを認識し、Y 型のトークンとして返す必要があります。文字が特殊でない場合 (数字や文字など)、特殊文字または空白があるかどうかを先に調べ、空白が見つかった場合、プログラムはその文字セットをタイプ X のトークン。プログラムが数字を読み、次に別の数字を読み、次に文字を読み込んだ場合、タイプ Z の 2 つの数字のみを返す必要があります。

例として、TextFile.txt には次のテキストがあります。

プログラムはファイル全体を読み取り、「{」を確認し、そのトークンを Y として返し、空白を確認し、それを無視し、「t」を確認します。これは特殊文字ではないためです。プログラムは '123' を読み取り、それを Z として返し、次に 'test' を読み取って X を返す必要があります。

プログラムがどのように動作するかは理解していますが、先読み文字リーダーに何を使用すればよいかわかりません。Scanner クラスを見ましたが、nextChar() のメソッドがありません (これは便利でした)。

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

c# - 後方参照による正規表現の前向きな先読み

シンタックスハイライトを使用して、非常に特殊なエディターを作成しようとしています。私はすべての単純なものを正規表現で作成しましたが、それは十分に単純でしたが、今度は正規表現でもいくつかの高度な機能を追加したいと思います。

この場合、定義されたタグがJumpToコマンドで使用されているかどうかを知りたいです。
例:

ここでの目的は、 JumpTo (1つまたは複数)によって参照されるすべてのDefine(Definexxx)を、定義の前または後に見つけることです。別のステップでは、 JumpToによって参照されていないDefineも見つけたいと思います。

ポジティブな先読みのために、式「Define(?<tag> \ d +)(?= JumpTo \ k <tag>)」を試しました。「Define1」が見つかると思いますが、見つかりませんでした(複数行オプションありでもなしでも)。

これを1ステップの正規表現で実行することは可能ですか、それともアイデアを捨てて2ステップのアプローチを検討する必要がありますか?

0 投票する
3 に答える
226 参照

php - から選択する正規表現<>内のすべてのテキストを無視します

次の2種類のテキストがあります。

タイプ1:

タイプ2:

私はphpを使用していpreg_match_allます。上記からオフィサー1とオフィサー2を返す単一の式が必要です。私は< /div>最初のアンカーと< /div>2番目のアンカーとして執行役員を使用していますが、そのすべてのテーブルの中にキース・デニスを見つけることができません。

かっこ内のすべてのテキストを無視して、anchor1とanchor2の間のテキストを返すにはどうすればよい<>ですか?

私はこれらのスレッドを見ましたが、それらのソリューションを私のために機能させることができませんでした: 正規表現:Xが2つの中括弧の間にないXまですべてを抽出します

すべてですが、[と]の間のすべて