2016-04-17 14 views
0
1)mysql> SELECT 'aXbc' REGEXP '[a-dXYZ]';     -> 1 
2)mysql> SELECT 'aXbc' REGEXP '^[a-dXYZ]$';    -> 0  
3)mysql> SELECT 'aXbc' REGEXP '^[a-dXYZ]?$';    -> 0 // 0 or 1 
4)mysql> SELECT 'aXbc' REGEXP '^[a-dXYZ]+$';    -> 1 // 1 or more 
5)mysql> SELECT 'aXbc' REGEXP '^[a-dXYZ]*$';    -> 1 //0 or more 

私は2番目の比較について混乱しています。 [a-dXYZ]で始まり[a-dXYZ]で終わる文字列ではないのでしょうか?この比較はなぜ戻りますか? (正規表現)

つまり、[a-dXYZ]で始まり[a-dXYZ]で終わる文字列が長さ1ですか?これが当てはまる場合、 '^ .... $'(左端と右端)のような^と$記号を使用すると、すべての部分文字列が削除され、文字列全体のみが分析されます。

注:これはどうすれば問題にすることができますか。私は因果関係を理解し​​たい。 abcdXYZと最初の文字と最後です:

答えて

2

^[a-dXYZ]$は、それがいずれか一つの文字と一致します。だから、2回目の観察はまっすぐです。

^は入力の開始を意味し、$は入力の終了を意味します。

あなたが1回以上繰り返すように0回以上または +を繰り返す *を使用することができます

^[a-dXYZ]+$ 

あなたは[a-dXYZ]で始まり、終わる文字列と一致する場合は、以下を使用することができます。

^[a-dXYZ].*[a-dXYZ]$ 
#  ^Match anything zero or more times 

は、いくつかの正規表現の実装では、あなたは、^$試合が始まると最後の行のようになりますm修飾子を使用することができますそれだけで一貫性のあるもののすべての行を置き換えます

s/^1+$/_/gm 

:入力より評価者は、次のPerlスニペットを考える

% seq 1 11 | tac | perl -p0e 's/^1+$/_/gm' 
_ 
10 
9 
8 
7 
6 
5 
4 
3 
2 
_ 
+0

^[-dXYZ] $それが全体として1つの長さの文字列を探し、サブストリングは考慮されませんか? –

+0

1文字の入力と一致します。 – andlrc

+0

私は '^ [B](。*)(^ [K] $)(。*)[B] $'はBAAKAABでtrueを返すなら、文字列の真ん中で^ $記号を使用することができます。 (oracle sql、mysql、java) –

関連する問題