1

私のアプリケーションでは、ユーザーがチャーターを使用していくつかの検証ルールを作成できるようにしています。これは、多くのチャーターを'*'意味し、1文字を意味します。たとえば、ユーザーは書くことができるので、このようなものと一致する必要があります。より複雑なルールを入力します。'?''*''?'"*Ma?s*""ajdg adbf MaKs sjklfd"

ルールと一致文字列をSQL Serverデータベースに送信して問題を解決し、それぞれ'*''%'およびそれぞれ'?'に置き換えて'_'、同様の条件を使用してうまく機能しましたが、ユーザーが入力できる検証ルールがたくさんあり、一致するものがたくさんあるので、多くのdb操作があるので、新しいc ++ 11正規表現を使用してクライアント側でそれを行うと思いました。多くの検索を行い、多くの記事を読みましたが、答えはありませんでした。

それで、これは正規表現で行うことができますか? そしてどうやって ?

4

2 に答える 2

2

正規表現を作成したい場合は、仕様を正規表現に変換するだけです。そのためには、次を置き換えるだけです:

  • *.*(または.+、少なくとも1文字が必要かどうかに応じて)
  • ?.

ノート:

.は任意の文字に一致します。文字のみを探している場合は、 replace .byを使用できます[a-zA-Z]。数字の場合、\d. 文字や数字、[a-zA-Z0-9]などの場合

于 2013-02-26T09:38:44.773 に答える
1

に置き換えることでこれを行うこと*.*でき?ます.。ただし、<regex>私が遭遇したほとんどのC ++実装は実際には機能していないため、当面はに依存する必要があることに注意してくださいBoost.regex

余談ですが、最初にユーザー入力をサニタイズする必要があることに注意してください。そうしないと、悪意のあるユーザーがシステムに非常に悪いことをする可能性があります。

于 2013-02-26T09:41:19.240 に答える