1

メッセージの表があります。特定の形式に準拠した ID コードを持つメッセージをテーブルで検索しようとしています。以下に示す正規表現は、PHP でこれらの値を照合するために作成されたものですが、MySQL クエリに移動したいと考えています。

次のような特定の形式の識別子コードを探しています。

[692370613-3CUWU]

コードの形式は一貫しています。

  • ハードブラケット [ ] で開始および終了
  • 内部の 2 つのコンポーネント、
    • 1 つ目は口座番号で、最小 9 桁ですが、それ以上になる場合もあります
    • 2 番目のコンポーネントは英数字コードで、5 文字で、1 ~ 9 を含めることができ、「O」を除く大文字を使用できます
  • 完全なコードは、メッセージ内のどこにでも出現できます

次のようなクエリがあります。

SELECT * FROM messages 
WHERE 
    msgBody REGEXP '\\[(\d){9,}-([A-NP-Z1-9]){5}\\]' 
      OR 
    msgSubject REGEXP '\\[(\d){9,}-([A-NP-Z1-9]){5}\\]'

テスト用に msgBody フィールドに上記のサンプル値のみを含むテーブルにテスト行を作成しましたが、結果は返されません。

PHP スタイルの正規表現と MySQL の変換で何かが欠けていると思います。

助けていただければ幸いです。

ありがとうございました!

4

2 に答える 2

1

\d使用してみる代わりに[[:digit:]]

于 2012-09-14T17:26:40.950 に答える
1
SELECT * FROM messages 
WHERE 
  msgBody    REGEXP '\\[([0-9]){9,}-([A-NP-Z1-9]){5}\\]' 
             OR
  msgSubject REGEXP '\\[([0-9]){9,}-([A-NP-Z1-9]){5}\\]'
于 2012-09-14T17:33:31.973 に答える