-4

2つの単語が存在する必要があるパターンに一致させたいのですが、正規表現を機能させることができません。

結果はnullです。なんで?

select 'only test bla dido simple' REGEXP '^(\\?=.*\\?(simple))(\\?=.*\\?(only))*$';
4

2 に答える 2

0

結果は実際にはゼロであり、ではありませんNULL。MySQLREGEXP演算子は、不一致の場合は0を返し、一致の場合は1を返します。(ご存知のように、NULLRDBMSの世界では特定の意味があります。)

だから問題は、あなたの特定の正規表現は何に一致するのかということです。それを解体しましょう。

 '^(\\?=.*\\?(simple))(\\?=.*\\?(only))*$'

で始まり、^で終わる$ため、部分文字列ではなく、文字列全体と一致する必要があります。

これは、2つの連結された式で構成され、両方の形式が

(\\?=.*\\?(word))

私が知る限り、あなたは一致したいです:

  1. オプションのバックスラッシュ
  2. 等号
  3. 長さが0以上の任意の文字列で、入力をゴブリングします
  4. 別のオプションの円記号
  5. 言葉

この複雑な一連の試合であなたが何を達成したいのか理解できません。入力テキストに等号はありません。

このステートメントを使用できます。もちろん、simpleという単語は入力テキストの単語の後に続くため、ゼロを返します。

 SELECT 'only test bla dido simple' REGEXP '^.*(simple).*(only).*$'

MySQLは(?=pattern)先読み式を処理しません。それがあなたがやろうとしていることである場合、

于 2012-06-26T13:31:13.857 に答える
-1

単純な単語の場合、通常の正規表現のみ^(?=.*\bsimple\b)(?=.*\bonly\b).*$が。

mysqlでこの正規表現を受け入れるには、必要に応じてエスケープ\文字を追加する必要があります。これがタスクになります。

于 2012-06-26T13:19:01.403 に答える