在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/Java  PHP  HTML/ 如何正則匹配到 12-128 ,而不會匹配到129的前兩位12?

如何正則匹配到 12-128 ,而不會匹配到129的前兩位12?

在嘗試使用正則匹配 12-128 時,發(fā)現可以匹配到129,如題。

/ 192.168.0.(12[0-8]|1[0-1][0-9]|[2-9][0-9]|1[2-9]) /

匹配 129 時返回true。
判斷 255 也會匹配到前兩位 25。

如何能避免此類情況出現?

或者是用其他寫法?

回答
編輯回答
尕筱澄

對數字區(qū)間通常是分段寫正則,例如12-128,分成:12-19, 20-99, 100-119,120-128:/^((1[2-9])|([2-9][0-9])|(1[01][0-9])|(12[0-8]))$/

對于更復雜的,還是直接提取數字,然后if/else判斷吧,簡單的正則+簡單的判斷總比復雜的正則好。

2017年2月12日 22:44
編輯回答
毀憶

這種需求建議就不要用正則實現,直接用正則粗略過濾是個正整數,然后再轉成整數判斷一下大小就行了,反正js在前端執(zhí)行,這個速度又不會太慢,還容易維護,你覺得你寫個這個正則后面你自己還能看得懂嗎?

EDIT,沒細看你的需求,你這個需求完全不應該用正則去實現,而應該直接用ipv4的解析類庫去搞,直接限定ip段豈不美哉?

2017年1月14日 17:59
編輯回答
背叛者
/192.168.0.(12[0-8]|1[0-1][0-9]|[2-9][0-9]|1[2-9])/

這個正則的意思是只要測試的字符串里面存在一個子字符串使得這個正則匹配,那么就會返回true,所以當你使用'192.168.0.129'去測試的時候,因為子字符串192.168.0.12是滿足要求的,所以測試結果是true。

所以想要避免這種情況,需要在正則的開始添加^,在正則的最后添加$。
^匹配字符串的開頭,匹配的是一個位置;
$匹配字符串的結尾,匹配的是一個位置;

/^192.168.0.(12[0-8]|1[0-1][0-9]|[2-9][0-9]|1[2-9])$/

加上^ $的正則的意思是,這個字符串要整個匹配這個表達式,而不是其中的某個子串匹配就可以。這個時候測試'192.168.0.129'就會返回false了.

如果你的需求就是判斷子串中是否有匹配的情況,那么你可以簡單的在后面添加一個斷言,使得后面的字符不是數字:

/192.168.0.(12[0-8]|1[0-1][0-9]|[2-9][0-9]|1[2-9])(?![0-9])/
2017年11月23日 10:04