問題タブ [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 投票する
1 に答える
831 参照

c++ - SpiritQiシーケンス解析の問題

Spirit ::Qi2.4を使用したパーサーの記述に問題があります。次の形式で解析する一連のキーと値のペアがあります<key name>=<value>

キー名[a-zA-Z0-9]の後には、キー名と記号=の間に空白を入れずに記号を付けることができます。キー名の前にも、常に少なくとも1つのスペースがあります。=

=は、 charおよびcodeブロックを含む式を除いて、ほとんどすべてのC式(スペースも可能)にすることができます{ }

キーと値のペアのシーケンスの最後に{記号があります。

この式のパーサーを書くのに苦労しています。キー名の前には常に少なくとも1つのスペースがあり、その後に=スペースがなく、スペースが含まれていないため、次のように定義しました。

値はほとんど何でもかまいませんが、文字も含める=こともできない{ため、次のように定義しました。

値をキャッチするために、このような先読みを使用することを考えました。

しかし、何らかの理由で機能しません(ValueExpression貪欲に看板に上がり=、そこから何をすべきか「わからない」ようです)。私はLLパーサーの知識が限られているので、ここで何が調理されているのかよくわかりません。この種のシーケンスに取り組むことができる他の方法はありますか?

シリーズの例は次のとおりです。

追加情報:これははるかに大きな文法の一部であるため、Spirit.Qiパーサー(「=」で分割してカスタム解析などを行うなど)以外の方法でこの問題を実際に解決することはできません。

編集:

ここで最小限の作業例を作成しました:http://ideone.com/kgYD8
(VS2012でブースト1.50でコンパイルされていますが、古いセットアップでも問題ありません)。

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

c# - 文字列C#の間のテキストを削除する方法

私はこの種のテキストを持っています:

LINE \ r \ n 5 \ r \ n11DA3 \ r \ n330 \ r \ n2 \ r \ n100 \ r \ nAcDbEntity \ r \ n 8 \ r \ n0-FD \ r \ n 6 \ r \ nHIDDEN \ r \ n100

太字のテキストを見てください。5 \ r\nと\r\n100の間のテキストを置き換えたいと思います。私はこのコードを試しました:

しかし、それは機能しません。私のコードに何か問題がありますか?(\ S +?)が問題だと確信していました。それを解決する方法はありますか?

0 投票する
4 に答える
761 参照

python - Python (Perl タイプ) 正規表現の先読み/後読み

string を考えてみましょうs = "aa,bb11,22 , 33 , 44,cc , dd "

Pythonの正規表現モジュールs使用して、次のトークンのリストに分割したいと思います。これは、Perl が提供する機能に似ています。

  1. "aa,bb11"
  2. "22"
  3. "33"
  4. "44,cc , dd "

ノート:

  • コンマでトークン化したいのですが、それらのコンマの両側に数字がある場合に限ります。
  • 私が対象としているこれらの「数字のカンマ」の周りの(オプションの)空白は、結果から削除する必要があります。オプションの空白は、複数のスペースにすることができます。
  • その他の空白は、元の文字列に表示されているとおりに残す必要があります。

これまでの私の最善の試みは次のとおりです。

しかし、これは次のように出力します:

私が欲しいものが4つリストに含まれているので、これは私が欲しいものに近い. 空の文字列とスペース/コンマのみで構成される文字列をすべて削除することもできますが、これらすべてを実行する単一行の正規表現が必要です。

何か案は?

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

regex - 正規表現を改善して、少なくともN文字の英数字の単語を含むURLに一致させる

次のパターンに従って、URLに一致する正規表現を実行しました。

どこ

part1:は一般的な単語です
part2:はアンダースコア付きの英数字の単語で、少なくとも2文字が含まれてい
ますpart3:は1〜10桁の数字の単語です

たとえば、有効なURLは次のようになります。

したがって、 part1
=ニュース
part2= my_news_title_200_is
part3 = 12345

私はこれに来ました:

クラスで表現:

しかし、REパターンのpart2を表現するためのより良い方法があると思います。

前もって感謝します。

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

java - Java の正規表現ルックアラウンド コンストラクト: 必要な最適化に関するアドバイス

次のコンマ区切りリストでファイル名を検索しようとしています。

text.txt,temp_doc.doc,template.tmpl,empty.zip

Java の正規表現の実装を使用します。出力の要件は次のとおりです。

  1. ファイル名のみを表示し、それぞれの拡張子は表示しません
  2. 「temp_」で始まるファイルを除外する

次のようになります。

文章

テンプレート

空の

これまでのところ、最初のタスクに対処するために多かれ少なかれ満足のいく正規表現を書くことができました。

2 番目の要件に準拠させるための最良のオプションは、ルックアラウンド構造を使用することですが、信頼できる最適化された式を記述する方法がわかりません。次の正規表現は必要なことを行っているように見えますが、明示的な最大ファイル名長に依存する以外の理由がなければ、明らかに欠陥のあるソリューションです。

PS私は正規表現を数日間しか勉強していないので、この初心者スタイルの過度に複雑なコードを笑わないでください:)

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

regex - Perl 正規表現で既に一致したものを効率的に一致させるにはどうすればよいですか?

次の規則に従う必要がある文字列を検証するための正規表現を作成しました。

  1. 少なくとも 1 文字である必要があります
  2. 空白文字を含めることはできません
  3. 最初の文字は句読点であってはなりません
  4. 最後の文字は句読点であってはなりません
  5. 数字が続く句読点で終わることはできません
  6. 他のすべての文字は、. 以外の任意の UTF-8 文字にすることができます/[:@#]

正規表現は次のとおりです。

足りないものがありますか?ルール 5 は適用されません。私はこのようなコードを書くことによってそれを強制してきました:

これを行わなければならない場所がたくさんあるので、すべてを単一の正規表現で実行したいと思います。問題は次のとおりです。「foo,23」などの値を拒否する正規表現は?

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

php - PHP preg_replace がクラッシュします。正規表現マスターのみ

元気ですか?いきなり本題に入ります。

基本的に個々のまたはネストされた <blockquote> タグを削除する再帰的な正規表現を使用しています。プレーンな <blockquote> ... </blockquote> テキスト (ネストされているかどうかにかかわらず) を削除するだけで済み、これらの外側にあるものはすべて残します。

この正規表現は、私が望むとおりに正確に機能します(先読みと再帰の使用に注意してください)

しかし、大きな問題があります: $comment が大きい (3500 文字以上) と、Apache がクラッシュします (セグメンテーション違反だと思います)。

問題の解決策が必要ですが、クラッシュを解決するか、より良い正規表現を使用するか、同様に機能するカスタム関数を使用します。

ネストされた特定のタグを削除する方法についてアイデアがある場合は、歓迎します。

前もって感謝します

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

regex - htmlタグをperl正規表現と一致させる方法は?

form以下のコードを考えると、最初のオカレンスと一致させたいと思います。私はそれを達成するためにネガティブ先読み?!が使用されるかもしれないことを知りましたが、それは機能しません。正規表現の何が問題になっていますか?

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

java - それぞれに異なるタイプのInputStreamを使用して、同じInputStreamで異なるデータグループを読み取るにはどうすればよいですか?

、、、、など、さまざまな方法でJavaにデータを保存する必要がありましたFile。そして、3つのメソッドがほぼ同じことを実行することになりました。そこで、パラメーターとしてを使用して、それらを単一のメソッドに変更しました。単一のOutputStreamにいくつかのことを書きました。たとえば、テキスト、シリアル化されたオブジェクト、別のシリアル化されたオブジェクト、数値データなどです。StringSystem.outOutputStream

しかし今、私は立ち往生しています。書かれていることを区別できないという事実を見落としていました。データ用にを作成しInputStreamます。Scannerそのストリームで最初にテキストを読み取るためにを使用し、次にObjectInputStreamを使用してシリアル化されたオブジェクトを読み取ろうとしましたが、。を取得しEOFExceptionます。

スキャナーが先読みしていると思います。スキャナーが先読みしないようにするにはどうすればよいですか。
むしろ、それぞれに適切なInputStreamを使用して、データの各グループを読み取るにはどうすればよいですか。