2013-03-15 122 views
0

例如具體的指標,如果我有一個電話號碼,我想看看如果任的最後兩位數字的含有7.我能做到這一點純粹與正則表達式還是我之間的正則表達式必須首先拆分字符串?是否有可能匹配字符串

+0

一個平凡的正則表達式。 – Will 2013-03-15 11:13:20

+0

您使用哪種語言? – Saju 2013-03-15 11:15:24

回答

2

可以使用一個正則表達式:

7\d?$ 

這將一個7無論是在末端或在第二到最後的位置相匹配。或者,更確切地說,它匹配字符串末尾的7,可選地跟隨另一個數字,在最後兩個位置之一轉換爲7。

+0

我會用7 \ d?$ – gislikonrad 2013-03-15 11:20:54

+0

自發布答案以來,正則表達式經歷了4次或5次迭代(每次都有功能);-) – Joey 2013-03-15 11:23:04

+0

您能解釋爲什麼需要問號嗎? – Walex 2013-03-15 12:11:07

0

你可以使用環視來匹配字符串的任意索引,我們將使用後面的(?<=)來檢查我們是否有start of string,後面跟着固定數量的字符。和前瞻性,以(?=)檢查,我們有字符固定數量的向右依次end of string。從字符串的開頭

指數:

(?<=^.{N})REGEX 

REGEX將匹配從第N(從零開始)指數,所以如果你想檢查是否從左側的3ND字符x在以下字符串12x45那麼你可以使用(?<=^.{2})x其中x是檢查如果字符是x正則表達式。

使用前瞻,你可以從做到底處於同一起跑線:

REGEX(?=.{N}$) 

所以要檢查如果任的最後2位數字是7的正則表達式將是7\d?(?=.{0}$)(這是什麼喬伊提出的等價物。但是,正如你所看到的,這對於所有的索引都是適用的(並不是說你應該用這個來代替簡單的那個,它只是一個更一般的正則表達式)

如果你想檢查第三個(從零開始)左邊是x然後不奇怪你會有x(?=.{2}$)

您也可以結合這兩個指標之間,例如檢查要檢查是否在任何一端的第三個數字之間的一切都在12xxxxxx21x的任意號碼,然後你,你有以下:

(?<=^.{2})x*(?=.{2}$) 


注:
如果你只是想要一個匹配/不匹配的正則表達式,那麼你可以沒有查找變通,但隨後你會匹配整條生產線,而不是隻有你在REGEX指定的內容。

e.g:

(?<=^.{2})x*(?=.{2}$)將匹配xxxxxx對於上面的例子,在那裏爲^.{2}x*.{2}$將是字符串匹配,但它會匹配整個事情(12xxxxxx21),而不是僅僅xxxxxx