問題タブ [boost-xpressive]
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.
c++ - boost::xpressive static を使用してセマンティックアクション内でオプションのサブマッチを参照する方法は?
次と同等のブースト表現の sregex とセマンティック アクションがあります。
以前はこれをブースト 1.43 で問題なく使用していました。最近、新しいブーストにアップグレードする必要がありましたが、次の問題が発生しました。サブマッチが何も一致しない場合 (オプションであるため)、boost 1.48 では、空のオブジェクトで実行さbad_lexical_cast
れると、セマンティック アクションによって例外がスローされます。as
s1
この問題を解決するにはどうすればよいですか。以前は機能していたのは単なる偶然であり、これを行うために使用すべきより安全な方法がありますか? それとも、これはたとえばlexical_cast
、現在壊れているコードの変更xpressive
ですか?
追加情報
regex_actions.hpp で以下を変更することで、実際の問題を一時的に解決することができました。
の中へ:
これは、おそらくこれ自体を修正する必要があるものであると私に信じさせますxpressive
. しかし、それが私の側で間違っていることではないことをまだ100%確信しているわけではありませんxpressive
.
regex - セグメンテーション違反/スタックオーバーフローを引き起こす正規表現
(またはそう思う)...
何かを解析するための正規表現エンジンとしてboost::xpressiveを使用していると、セグメンテーション違反が発生します。gdbは300を超えるスタックフレームを表示するため、再帰性と私の悪い正規表現が原因であると思われます。だから、これが私の(大文字と小文字を区別する)正規表現で、perl /python表記法です:
私は一致することを期待しています
最初のグループに最初の大文字のテキスト(HEADER HERE)があり、2番目のグループに2番目の大文字のテキストがあります。グループ2に一致するはずのテキストが非常に長い場合、常にセグメンテーション違反が発生します。
なぜこれが機能しないのですか?
c++ - boost::xpressive でシーケンスの開始を確認
テキスト ファイルを解析するために boost::xpressive を使用しています。行が「#」(1 回以上) で始まる場合にのみ確認したい。
次のコードを使用しています
しかし、行が # で始まる場合でも、常に「一致が見つかりません!」というメッセージが表示されます。誰でもここで私を助けることができますか?
ちなみに、boost::xpressive 'bos' を使用して rex1 ステートメントを書くのを手伝ってくれる人はいますか?
ありがとう!アイーシャ
regex - 複数行のテキストを一致させる方法は?
これは機能しません。boost.regex ではなく boost.xpressive を使用します。複数行のテキストを一致させる方法は?
regex - テキストの終わり全体を意味する xpressive のワイルドカード文字は?
ANSI C PCRE を使用すると、次の方法でセクションとその内容を抽出できます。
[sec1] a = b [sec2] c = d
私が得た[sec1] a = b
ものから[sec2] c = d
しかし、どうすればxpressiveでそれを行うことができますか?
regex - スタックの使用量を減らすには、どの Xpressive アプローチが最適か
私は、現在の組み込み C++ プロジェクトで Xpressive を広範囲に使用しています。
私が知っているように、Xpressive はスタックの優れたユーザーです。しかし、より効率的なスタック効率の Xpressive 正規表現アプローチはありますか?
たとえば、32 ビット整数を表す文字列に一致する正規表現は、数字 6 が 6 以下かどうかをテストする必要がある場合があります。
Xpressive (および他の正規表現エンジンも、私が知っている) では、次のような多数のアプローチが可能です。
また
また
正規表現は、次の 3 つの数字を許可する場合があります。
また
しかし、選択肢があり、ソース コードのレイアウトをあまり気にしない場合、次の場合に最適なアプローチは次のとおりです。
a) スタック;
b) 速度;
c) ?
c++ - Boost xpressivedynamicregexと一致することができません
Edit8:同じ問題で私の後に来るかもしれない人のために最初に解決策を投稿しました。
解決策:
()演算子を呼び出す代わりに、=で正規表現を割り当てました。うまくいきました。それは愚かでした。
元の問題:
私はしばらくの間xpressiveと戦ってきましたが、まだ何も機能していません。次のコードで:
期待する一致が見つかりません。助けていただければ幸いです。
編集:正規表現のコンパイル行を次のように変更してみました
まだ何もありません。
Edit2:MinGWGCC4.7でコンパイル
Edit3:正規表現文字列が宣言されている行を両方に変更してみました
と
まだ何もありません。
Edit4:次の情報はありませんが、結果はありません。
Edit5:この時点で、strの最初と最後の両方に「foo」が2つ一致することを期待しています。
Edit6:少なくともプレフィックスを取得できることを期待して、match_continuousフラグを設定してregex_searchを実行しようとしました。サイコロはありません。また、ECMAScriptフラグを使用してコンパイルし、match_defaultフラグとmatch_continuousフラグの両方を使用してregex_searchを実行してみました。
Edit7:strstr()がここで機能することはわかっています。これは単純なサンプルケースだからです。実際のアプリケーションでは、ブーストが不可欠です。
javascript - 正規表現での OR のネスト
or
別のセットを実行する必要がある式を一致させるにはどうすればよいですか?
つまり、フォーマットの何かをどのように一致させるのですか
ここで、a、b、x、および y は文字列です。
のようなフレーズを一致させたい
しかし、次のようなものではありません:
Boost Xpressiveで使用しようとしているので、ECMAScript または Perl タイプの正規表現を使用するオプションがあります。
c++ - Boost Xpressive sregex の割り当てとキャプチャ グループの問題
boost xpressive sregex の割り当てで奇妙な動作に気付きました。以下のコードを参照してください。機能しない最初のコード スニペットは、sregex にオブジェクトの予備的な割り当てがあり、後でメインの式で使用されます。うまく機能する 2 番目のコード スニペットには、以前の sregex 割り当てがありません (最後のメインのものを除く)。ブースト xpressive api を間違って使用している場合はお知らせください。
動作しないコード
string_to_parse = NameX,mark1:192.168.1.100:5555,mark2:192.168.1.101:5556;
(解析に失敗) what[<>] には値が含まれていないことを意味します。
動作するコード
string_to_parse = NameX,mark1:192.168.1.100:5555,mark2:192.168.1.101:5556;
(パースに合格)