源自這裡:
.*?(\d).*?\1.*?$ 這個判斷了有重複的數字
原理: ?是非貪婪,從最少的數量試起
*是0~無窮大次。最小就是0
對於源串「1234567890」
第一次: .*? ==> 空
\d ==> 1
.*? ==> 空
\1 ==> 2 但是希望的是前面的捕獲組(\d)的內容 ,也就是1,
所以,第一次嘗試失敗。
第二次: 正則從最後面向前回退狀態,所以,先重新嘗試第二個 .*?
.*? ==> 空
\d ==> 1
.*? ==> 2
\1 ==> 3 但是希望的是前面的捕獲組(\d)的內容 ,也就是1,
所以,第一次嘗試失敗。
。。。第n次嘗試,當第二個.*?已經吃進23456789,\1 ==> 0,仍然是失敗,已經無法再有嘗試了。
開始回退再前面的第乙個.*?
.*? ==> 1
\d ==> 2
.*? ==> 空
\1 ==> 3 但是希望的是前面的捕獲組(\d)的內容 ,也就是1,
所以,再次嘗試失敗。
。。。。
第n次嘗試,當第乙個.*?已經吃進12345678,\d ==> 9 \1 ==> 0,仍然是失敗,已經無法再有嘗試了。
整個嘗試失敗,表明字串是由完全無重複的數字構成的。
$ 是表明到當前位置的時候必須是字串結束位置,確保所有字元都參加了嘗試。第三個.*?基本屬於配合它打醬油的。
把.*?換成.*,使用貪婪模式,應該也可以實現同樣功能,但是回退過程將完全不同。
第一次嘗試第乙個.*就吃進了1234567890,然後開始吐字元來回退。
mysql如何判斷指定字段資料不重複
ps 本人親測,阿里雲2核4g5m的伺服器價效比很高,新使用者一塊多一天,老使用者三塊多一天,最高可以買三年,感興趣的可以戳一下 阿里雲折扣伺服器 方法一 一句sql解決 insert into 表名 待插入欄位1,待插入欄位2,待插入欄位n select 張三 1 襪子 from 表名 a whe...
由洗牌想到的不重複隨機數的生成
自己想的,希望磚家斧正演算法模擬現實中洗牌 單副牌 54張 放在牌座上,給一副牌每張牌標定乙個層,一副牌最低端的是第0層,最上面的是第53層,那麼所有牌的所在的層就固定了。例如 紅桃a,在洗牌之前,在撲克牌的第5層 這裡相對的撲克牌的第0層是最低下的一張牌,當然也可是最上面的一張牌,這是乙個參照問題...
sqlserver如何快速生成不重複的隨機資料
1 如何生成8位隨機數,生成的數越隨機,重複的可能性當然越小 2 控制不重複 3 考慮效能 針對這個問題,我寫了如下的示例來解決,希望能為有這類需求的人提供指導 use tempdb go 建立測試表 create table tb id char 8 建立用於自動過濾重複值的唯一索引 create...