1

私のデータベースでは、データは以下のように保存されています:

Q_101_B1
Q_101_B2
Q_101_B17
Q_101_Bch1
Q_101_Ben1
Q_101_B238
Q_101_B

char '' の後に厳密に数字を持つデータのみをプルするB必要があるため、この場合、これらの 2 つを除くすべてのデータをプルする必要がありQ_101_Bch1ますQ_101_Ben1

私はこのクエリで試しました:

select lang from test_table where lang REGEXP  '^[Q_101_B]|[0-9]'

しかし、残念ながら、それらすべてを引っ張っています。

このクエリの正確な正規表現は何ですか?

注:Q_101_B動的に取得される別の文字列にすることができ、PHP コード内でクエリを作成するときにこれを追加します。

4

1 に答える 1

0

元のパターンは、、、、、、または10 進数を含む文字Qで始まる任意の文字列と一致します。_10B

代わりに次のパターンを使用してみてください。

select lang from test_table where lang REGEXP  '^Q_101_B[0-9]'

Q_101_Bこれは、 で始まり、その後に 10 進数が続く任意の文字列と一致します。

ただし、Q_101_B(小数点なしで) 同様に返されることを示したので、これを使用できます。

select lang from test_table where lang REGEXP  '^Q_101_B([0-9]|$)'

Q_101_Bこれは、 で始まり、その後に 10 進数または文字列の末尾が続く任意の文字列と一致します。

このパターンのデモンストレーションをここで見ることができます。

また、これQ_101_Bは単なるサンプル文字列であり、実行時に別の文字列に置き換えられる可能性があると述べたので、preg_quoteメソッドを使用してパターン内のリテラルを安全にエスケープすることを検討することをお勧めします。

于 2013-08-27T16:02:58.033 に答える