問題タブ [string-parsing]

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 に答える
212 参照

php - MySQL 文字列から WHERE コンポーネントを動的に抽出する

次の文字列があるとします(これが MySQL ステートメントであることは忘れてください)。

WHERE 句でフィールド名と値を抽出する方法が必要なので、次のような配列があります。

これは動的な MySQL 文字列であるため、名前、年齢、または住所をハードコードすることはできません。

私が予測できる問題は次のとおりです。

  • フィールド名を見つけると、関数は各フィールド名に一致するようにすべての有効な演算子を知る必要があります (以下で使用する配列を参照してください)。
  • スペースは保証されていません (例: age=21)
  • ' と ' 内の値を検索しますが、' が文字列内にある場合は壊れません
  • ' と ' で囲まれていない値 (数値やその他のフィールド名など) の検索 (個別に処理する必要があります)

正規表現または文字列関数のいずれかを使用してこれを行う方法を知っている人はいますか?

必要な場合の演算子は次のとおりです。

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

c# - 特殊文字を使用してユーザー入力を解析するためのグッドプラクティスはありますか?

こんにちは、私は邪悪な銀河帝国に対する反乱のプログラムライターです。現在、デス・スターへの大胆な攻撃の準備をしています。

X-WingとY-Wingの戦闘機に搭載されているパイロット、ドロイド、システムに関する膨大な情報のデータベースを作成しました。これらの戦闘機は間もなくデススターを襲撃します。情報にすばやくアクセスする必要があるため、ユーザーがテキストの文字列を入力して、取得するデータを指定できるシステムを設計しました。

ユーザーが検索できるフィールドは多数あります。たとえば、ユーザーがR2D2に関するデータを検索したい場合は、クエリ「DROID:R2D2」を入力して、このデータをすばやく見つけることができます。レッドチームのすべてのパイロット、ドロイド、およびシステムに関するデータが必要な場合は、「TEAM:REDTEAM」と入力できます。

ただし、システムはより複雑なクエリを処理するように設計されています。前のクエリからわかるように、データフィールド名とデータ値はコロン:文字で区切られています。ユーザーは、フィールドごとに複数の値を検索し、一度に複数のフィールドを検索できる必要があります。

これが私の上級ユーザーに典型的なクエリです: "SHIPTYPE:X-WING、Y-WING; LOCATION:docking bay 94; DROIDTYPE:R2"

私はこれを処理した方法に非常に満足しています。この関数を使用しString.Split(';')て読み取り、ユーザーが選択した3つのデータフィールドの値を取得します。String.Split('、') `を使用String.Split(':') to seperate the data field name from the value, and then I userして、ユーザーが複数入力したさまざまなフィールド値を取得します。これがどのように機能するかを見ることができます。

ただし、1つの問題があります。レイア王女(彼女がどれほどうるさいのかご存知でしょう)は、ブラスターのキャリブレーション記録に「:」、「;」、「、」を使用することを主張しています。彼女がこのデータを照会しようとすると、彼女の照会は私のプログラムには理解できません。彼女は、この問題が修正されない場合、デススターはすぐに反乱軍の基地を破壊すると言います。

したがって、ユーザー入力を解析するための優れたプラクティスを提案するための支援をお願いします。どうすれば私のプログラムをプリンセスレイアのために機能させることができますか?

更新 私は自分の質問に対する答えについて推測します。Cフレーバーの言語でプログラミングすることを学んだとき、文字列リテラルで通常予約されている文字を指定できる「エスケープシーケンス」について学びました。(たとえば、「A」文字は通常、文字列リテラルを終了しますが、「」を使用して「エスケープ」できます)プログラムで同様のことを行うのは良い考えだと思いますが、どうなるかわかりません。それを達成するための最良の方法である。このデススターの攻撃の準備をする前は、私のプログラミング経験のほとんどは水分気化器のバイナリ言語でしたので、これは私にとって新しいことです。

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

php - フォーマットされた文字列の解析に関するヘルプ

私は文字列を持っています:

文字列の値は決して同じではなく、そこから「2 番目」の値を抽出したいと考えています。この場合、17 と 48 です。

私は正規表現があまり得意ではないので、私が行った回避策は次のとおりです。

問題は、文字's'が split_str[0] と split_str[1] の両方に存在するため、$sec 変数が 17 ではなく 283 を取得し続けることです。

繰り返しますが、私は正規表現があまり得意ではありません。この場合、正規表現が適していると確信しています。手伝ってください。ありがとう。

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

regex - 内部での DOM 解析、構造化ドキュメント トラバーサル

開発者として、ここにいるのは私だけではないと確信しています。私は常に、「ボンネットの下」にあるものを理解したいと思っています。DOM パーサーは、私にとってこの好奇心のリストのトップの 1 つです。私たちは皆、有名な投稿を知っています。私はちょっとした「O RLY?」を一緒にハックしたことさえあります。、一時的な必要性と好奇心の両方から。

しかし、カーテンの後ろにいる男に会いたいという私の必要性は満たされていないままです. DOM パーサー、または構造化されたドキュメント パーサーはどのようにドキュメントを解析するのでしょうか? 私の中級 Web アプリケーション開発者の理解が集まる限り、それは再帰的な文字列解析と状態保持ロジックの組み合わせであり、私自身のハック的な試みとは異なります。

魔術師は秘密を明かしてはならないが、まじめな話、彼はうさぎをどこに隠しているのだろう?

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

c++ - 単純な(ほとんど)可変パーサー

私のプロジェクトの1つでは、非常に単純な変数の検索と置換のパーサーを提供できる必要があります(主にパスで使用するため)。変数は主に起動時に使用され、ファイルにアクセスするために使用されることもあります(プログラムの主要な機能ではなく、リソースをロードするだけです)。したがって、パーサーは高性能である必要はありません。ただし、スレッドセーフであることが非常に望ましいです。

map<string, string>パーサーは、変数のセットを(現時点で)格納でき、トークンを文字列内の対応する値に置き換えることができる必要があります。変数値には他の変数が含まれている場合があります。これらの変数は、変数が使用されたときに解決されます(変数は時間の経過とともに追加される可能性があるため、追加されたときではありません)。

現在の可変文法は次のようになります。

私の現在のパーサーは、stringstreams("output"と"varname")のペアを使用し、最初の$が見つかるまで "output"ストリームに書き込み、2番目の$まで "varname"ストリームに書き込み、次に変数を検索します(の内容varname.str())。これは非常に単純で、変数値を繰り返し処理する場合でもうまく機能します。

(エラーチェックなどは削除されました)

しかし、その方法を希望の文法に適用しようとすると失敗します。VisualStudioがプロジェクト変数に使用するものに似たものが欲しいです。

私もできるようにしたいと思います:

変数名を繰り返すと壁にぶつかり、最善の方法がわかりません。

現在、2つの考えられる概念があります。

$が見つかるまで入力文字列を繰り返し、(次の文字として(次の文字として、次に一致する)を見つけます)(適切なクローズパラーンに達するまでレベルをカウントします)。そのビットを送信して解析し、戻り値を変数名として使用します。ただし、これは面倒で多くのコピーが発生するようです。

2番目の概念はchar *、、またはおそらくを使用しchar * &、終了ヌルに到達するまでそれを前方に移動することです。パーサー関数は、変数名を解析している間、それ自体への再帰呼び出しでポインターを使用できます。各呼び出しで解析された名前を追跡し、呼び出しの戻り値を追加する以外に、この手法を実装する最善の方法がわかりません。

プロジェクトはVS2010でコンパイルするだけでよいので、STLストリームと文字列、C ++ 0xのサポートされているビット、およびMicrosoft固有の機能はすべて公正なゲームです(これらの要件が変更された場合は一般的なソリューションが望ましいですが、これは必要ありません点)。ただし、他のライブラリを使用することは良くありません。特にBoostはそうではありません。

私のアイデアはどちらも、必要以上に複雑で厄介なもののように思われるので、これを処理するためのすてきなクリーンな方法を探しています。それを行うための最善の方法を議論するコード、アイデア、またはドキュメントはすべて大歓迎です。

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

.net - .NETユーザーエージェントの解析

さまざまなブラウザの次のユーザーエージェント文字列を比較します。

IE8

Mozilla / 4.0(互換性; MSIE 8.0 ; Windows NT 6.1; WOW64; Trident / 4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC6.0;.NET4。 0C; InfoPath.3; .NET4.0E)

Firefox 3

Mozilla / 5.0(Windows; U; Windows NT 6.1; en-US; rv:1.9.2.16)Gecko / 20110319 Firefox / 3.6.16

Chrome 10

Mozilla / 5.0(Windows; U; Windows NT 6.1; en-US)AppleWebKit / 534.16(KHTML、Geckoなど)Chrome / 10.0.648.204 Safari / 534.16


ブラウザ名(上記のサンプルでは太字)の表示にはFirefoxとChromeの間に一貫性があるようですが、IEは文字列内のまったく異なる場所に表示します... HttpBrowserCapabilitiesBaseクラスはこの文字列をどのように解析しますか?そして、このパーサー(またはカスタムパーサー)を使用してWurflリポジトリーを操作するにはどうすればよいですか?(たとえば、Win mobileで使用している間、リポジトリ内のどこにもUser_agent = "IE6"が見つかりません)

これらは、オブジェクトの.NETHttpBrowserCapabilitiesBaseクラスの変数です。Request

IE8

Firefox 3

Chrome 10

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

android - Android でディメンションを使用して値を解析する

Androidでディメンションを使用して値を解析する適切な方法は何ですか? intたとえば、次のいずれかの文字列から値 20 のを取得したいとします: 20px20mm20dp.

数値以外の文字で例外がスローされるため、試してもあまりうまくいきInteger.parseInt()ません。

0 投票する
6 に答える
2435 参照

php - 「MySQL Create Table」クエリ文字列から列名を取得する方法は?

「MySQL Create Table」クエリを文字列として取得し、列名とそのデータ型を配列に格納するスクリプトを PHP で作成したいと考えています。

例えば:

入力文字列:

出力:

クエリを直接実行するためのデータベース アクセスがありません。これまたは任意のアイデアのためのPHPライブラリはありますか?

ありがとう

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

jquery - jQuery: ユーザー入力として html を取得し、それを更新して、更新された html をユーザーに返します

ユーザーがテキストエリアフォーム要素で提供したHTMLを更新するツールを作成しようとしています。ユーザーに整形式の html テーブルを提供してもらいたいのですが、その行には、奇数行または偶数行を示すクラスが含まれている場合があります。既存のクラスをすべて削除し、適切な奇数/偶数クラスを追加したいと考えています。

フォーム要素:

ここで、テキストを取得して操作しようとしています。これは機能しませんが、誰かが私が何をしようとしているのかを理解してくれることを願っています:

私の研究で見つけられないのは、フォーム要素の文字列から DOM ツリーを作成し、その構築された DOM ツリーを操作して、ユーザーに戻す方法です。