我想知道如何匹配包含给定数字的所有单词?
我看过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
答案 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*