2011-12-28 104 views
0

我想知道如何匹配包含給定數字的所有單詞?如何匹配包含給定數字的所有單詞?

我看了O'Reilly正則表達式食譜,但沒有得到想法。

情況1中的某些字符是在數字的前面。(解決)

\ B(\ d + [^ \ S] +)\ b

time=>123, address~4321 

情況2。某些字符後按數字。(解決)

\ b(\ d + [^ \ S] +)\ b

1234<=range, 321=>location 

案例3.一些字符是第四位。

[email protected], address*4321%location 

案例4.重複在Case1或Case2或Case3的單行中。

firstTime=12 secondTime=34 
429923<=firstRange    353534=>secondRange 
A12345alpha  B9876beta 
+0

你稱之爲「單詞」是什麼?任何字符序列沒有空格? – fge 2011-12-28 20:17:09

+0

是的,沒有空格(/ s) – 2011-12-28 20:18:54

+0

哪種語言? – ridgerunner 2011-12-28 22:19:59

回答

0

既然你已經定義了一個字是不包含空格的任何字符串,您可能需要使用這樣的事:

([^\s]*\d+.[^\s]*)\m 

\m標誌應在整個使正則表達式工作多行。

+0

case1,case2,case3可能。謝謝。如何解決Case4? – 2011-12-28 20:41:53

+1

爲什麼不是'(\ S * \ d + \ S *)'? – gpojd 2011-12-28 20:49:19

+0

@gpojd:是的,我也可以這樣做。我想你的是完成工作的另一種方式。 我修改了我的答案。 – npinti 2011-12-28 21:10:37

0

嘗試和匹配(\S*(?:\d\S*)*)您的輸入。再次normal* (special normal*)*格局,normal\S(除了空格字符)和special\d+(一個或多個數字):

[email protected] ~ $ perl -ne 'print "Match: -->$_<--\n" foreach m/(\S*(?:\d+\S*))/gm' <<EOF 
> firstTime=12 secondTime=34 
> 429923<=firstRange    353534=>secondRange 
> A12345alpha  B9876beta 
> EOF 
Match: -->firstTime=12<-- 
Match: -->secondTime=34<-- 
Match: -->429923<=firstRange<-- 
Match: -->353534=>secondRange<-- 
Match: -->A12345alpha<-- 
Match: -->B9876beta<-- 

根據您使用正則表達式引擎,你甚至可以使用佔有慾量詞一直或者一個加速匹配的原子組。

如果你想一本書 - >http://regex.info

0

這裏是一個正則表達式將匹配每一個「字」包含數字「2」。

\S*?2\S* 

更改2至要匹配任何數字序列。如果你想匹配包含2,5或7的字,然後使用字符類:

\S*?[257]\S* 
相關問題