2017-08-02 9 views
2

PHPとMySQLデータベースを使用している私のウェブページを簡単に検索したいと思っています。 OR,-および"をサポートする基本検索語を入力してください。私は、複数のフォーム入力を使用するのではなく、Googleと同じようにユーザーエクスペリエンスを向上させるためのテキストフィールドを1つだけ使用したいと考えています。 >['a', 'b', 'c']検索文字列を(my)SQL where句を正規表現のグループに変換する

-

アイデアがあったすべてのサブ検索グループを抽出して、そのサブグループでこれらの

ので、有効な検索条件からSQLステートメントを構築するために正規表現を使用してパーサ

a b cを書くことでした a b OR c

- >['a', 'b OR c']

a -b - >['a', '-b']

a "b c"

- >['a', '"b c"']

a b OR c -d - >['a', 'b OR c', '-d']

a "b c" -d - >['a', '"b c"', '-d']

a "b c" OR d -e - >['a', '"b c" OR d', '-e']

a "b c" OR d OR "e f" -g - >['a', '"b c" OR d OR "e f"', '-g']

結果グループを使用して、where句を動的に作成できました。

私は正規表現([\-a-z])|(\"[a-z\s]+\")で自分自身を試しましたが、2回以上発生する可能性があるORによるグループ化については失敗しました(最後の例を参照)。 "..."部分文字列または1+

  • (?:\s+OR\s+(?:"[^"]*"|\S+))*非空白 - - 0+のシーケンスの

  • 答えて

    2

    あなたはregex demo

    詳細

    • (?:"[^"]*"|\S+)を参照してください

      ​​

      使用することができます:ストリングは、エスケープシーケンスを持つことができる場合、あなたは以下となります。 - 1+空白

    • (?:"[^"]*"|\S+)で囲まれたORサブ - "..."ストリングまたは1+非空白

    NOTE

    • \s+OR\s+エスケープ文字に応じて式のその部分を変更する必要があります。

    +1

    魅力的な作品です! – zersaegen

    関連する問題