2011-12-28 79 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* 
相关问题