正則是如何判斷有重複 由不重複的數字組成的串的。

2021-06-22 08:47:12 字數 875 閱讀 9324

源自這裡:

.*?(\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...