如何匹配包含给定数字的所有单词?

时间:2011-12-28 20:14:07

标签: regex

我想知道如何匹配包含给定数字的所有单词?

我看过O'Reilly正则表达式食谱,但未能得到这个想法。

案例1.某些字符位于数字前面。(已解决)

\ B(\ d + [^ \ S] +)\ B'/ P>

time=>123, address~4321

案例2.有些字符后跟数字。(已解决)

\ B(\ d + [^ \ S] +)\ B'/ P>

1234<=range, 321=>location

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

time~1325@range, address*4321%location

案例4.在Case1或Case2或Case3的单行中复制。

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

3 个答案:

答案 0 :(得分:0)

由于您已将单词定义为不包含空格的任何字符串,因此您可能希望使用以下内容:

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

\m标志应该使正则表达式跨多行工作。

答案 1 :(得分:0)

在输入中尝试匹配(\S*(?:\d\S*)*)。同样是normal* (special normal*)*模式,其中normal\S(空格字符除外),special\d+(一个或多个数字):

fg@erwin ~ $ 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<--

根据您使用的正则表达式引擎,您甚至可以一直使用占有量词,或者使用原子组来加速匹配。

如果你想要一本书 - &gt; http://regex.info

答案 2 :(得分:0)

这是一个正则表达式,它将匹配包含数字“2”的每个“单词”。

\S*?2\S*

将2更改为您想要匹配的任何数字序列。如果您希望匹配包含2,5或7的单词,请使用字符类:

\S*?[257]\S*