2

なぜスペースがすべての違いを生むのですか?

select * from beds where id~'.*Extra large.* (Red).*';

select * from beds where id~'.*Extra large.*(Red).*';

最初のものは何も返しませんでした、そして、2番目は私が望むように行動しました。私が一致させたいものの例は次のとおりです。

"Extra large" (Red) {2012 model}

(赤)の後にスペースがあるので、最初はうまくいくと思いましたか?

編集:「\」で角かっこをエスケープしても、スペースを確保できません。

4

2 に答える 2

4

問題は、角かっこをエスケープしていないことです"Red"。正規表現は次のようになります。

'.*Extra large.* \(Red\).*'

これにより、角かっこはリテラルの角かっこになりますが、エスケープせずに正規表現グループを作成します(一致する文字ではありません)。

最初の正規表現は文字Redをグループ化し、そのグループの前にスペースが必要だったRedため、一致"... Red..."しますが、入力の前に角かっこがあるRedため、一致しません。

.*2番目の正規表現は、の前にある任意の文字(を介して)を受け入れるRedため、一致します。

于 2012-09-22T01:56:03.300 に答える
3

これは、をエスケープしていないためです()

「赤」を囲む角かっこはグループを作成し、一致には含まれません。これが、空白のない正規表現が機能する理由です。

空白のない正規表現のは一致し.*その後に来て、その後になります。角かっこは演算子によって一致します。" (Red) {2012 model}.*

空白のある正規表現のは一致し.*"パターン(に含まれていません。

したがって、正しいパターンは次のようになります。

.*Extra large.*\(Red\).*
于 2012-09-22T01:59:45.347 に答える